@allahjs/utils 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +244 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/browser/cookieUtils/index.cjs +100 -0
- package/dist/browser/cookieUtils/index.cjs.map +1 -0
- package/dist/browser/cookieUtils/index.d.ts +55 -0
- package/dist/browser/domUtils/index.cjs +237 -0
- package/dist/browser/domUtils/index.cjs.map +1 -0
- package/dist/browser/domUtils/index.d.ts +116 -0
- package/dist/browser/index.cjs +12 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/urlUtils/index.cjs +262 -0
- package/dist/browser/urlUtils/index.cjs.map +1 -0
- package/dist/browser/urlUtils/index.d.ts +72 -0
- package/dist/core/arrayUtils/index.cjs +109 -0
- package/dist/core/arrayUtils/index.cjs.map +1 -0
- package/dist/core/arrayUtils/index.d.ts +67 -0
- package/dist/core/asyncUtils/index.cjs +180 -0
- package/dist/core/asyncUtils/index.cjs.map +1 -0
- package/dist/core/asyncUtils/index.d.ts +80 -0
- package/dist/core/colorUtils/index.cjs +38 -0
- package/dist/core/colorUtils/index.cjs.map +1 -0
- package/dist/core/colorUtils/index.d.ts +10 -0
- package/dist/core/cryptoUtils/index.cjs +428 -0
- package/dist/core/cryptoUtils/index.cjs.map +1 -0
- package/dist/core/cryptoUtils/index.d.ts +132 -0
- package/dist/core/dateUtils/index.cjs +245 -0
- package/dist/core/dateUtils/index.cjs.map +1 -0
- package/dist/core/dateUtils/index.d.ts +117 -0
- package/dist/core/index.cjs +34 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.ts +118 -0
- package/dist/core/numberUtils/index.cjs +126 -0
- package/dist/core/numberUtils/index.cjs.map +1 -0
- package/dist/core/numberUtils/index.d.ts +91 -0
- package/dist/core/objectUtils/index.cjs +249 -0
- package/dist/core/objectUtils/index.cjs.map +1 -0
- package/dist/core/objectUtils/index.d.ts +91 -0
- package/dist/core/pageUtils/index.cjs +74 -0
- package/dist/core/pageUtils/index.cjs.map +1 -0
- package/dist/core/pageUtils/index.d.ts +52 -0
- package/dist/core/stringUtils/index.cjs +163 -0
- package/dist/core/stringUtils/index.cjs.map +1 -0
- package/dist/core/stringUtils/index.d.ts +69 -0
- package/dist/core/validationUtils/index.cjs +154 -0
- package/dist/core/validationUtils/index.cjs.map +1 -0
- package/dist/core/validationUtils/index.d.ts +87 -0
- package/dist/esm/browser/cookieUtils/index.d.ts +55 -0
- package/dist/esm/browser/cookieUtils/index.js +96 -0
- package/dist/esm/browser/cookieUtils/index.js.map +1 -0
- package/dist/esm/browser/domUtils/index.d.ts +116 -0
- package/dist/esm/browser/domUtils/index.js +233 -0
- package/dist/esm/browser/domUtils/index.js.map +1 -0
- package/dist/esm/browser/index.d.ts +3 -0
- package/dist/esm/browser/index.js +4 -0
- package/dist/esm/browser/index.js.map +1 -0
- package/dist/esm/browser/urlUtils/index.d.ts +72 -0
- package/dist/esm/browser/urlUtils/index.js +248 -0
- package/dist/esm/browser/urlUtils/index.js.map +1 -0
- package/dist/esm/core/arrayUtils/index.d.ts +67 -0
- package/dist/esm/core/arrayUtils/index.js +105 -0
- package/dist/esm/core/arrayUtils/index.js.map +1 -0
- package/dist/esm/core/asyncUtils/index.d.ts +80 -0
- package/dist/esm/core/asyncUtils/index.js +175 -0
- package/dist/esm/core/asyncUtils/index.js.map +1 -0
- package/dist/esm/core/colorUtils/index.d.ts +10 -0
- package/dist/esm/core/colorUtils/index.js +34 -0
- package/dist/esm/core/colorUtils/index.js.map +1 -0
- package/dist/esm/core/cryptoUtils/index.d.ts +132 -0
- package/dist/esm/core/cryptoUtils/index.js +424 -0
- package/dist/esm/core/cryptoUtils/index.js.map +1 -0
- package/dist/esm/core/dateUtils/index.d.ts +117 -0
- package/dist/esm/core/dateUtils/index.js +241 -0
- package/dist/esm/core/dateUtils/index.js.map +1 -0
- package/dist/esm/core/index.d.ts +118 -0
- package/dist/esm/core/index.js +30 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/numberUtils/index.d.ts +91 -0
- package/dist/esm/core/numberUtils/index.js +122 -0
- package/dist/esm/core/numberUtils/index.js.map +1 -0
- package/dist/esm/core/objectUtils/index.d.ts +91 -0
- package/dist/esm/core/objectUtils/index.js +245 -0
- package/dist/esm/core/objectUtils/index.js.map +1 -0
- package/dist/esm/core/pageUtils/index.d.ts +52 -0
- package/dist/esm/core/pageUtils/index.js +66 -0
- package/dist/esm/core/pageUtils/index.js.map +1 -0
- package/dist/esm/core/stringUtils/index.d.ts +69 -0
- package/dist/esm/core/stringUtils/index.js +159 -0
- package/dist/esm/core/stringUtils/index.js.map +1 -0
- package/dist/esm/core/validationUtils/index.d.ts +87 -0
- package/dist/esm/core/validationUtils/index.js +150 -0
- package/dist/esm/core/validationUtils/index.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/request/ReqQueue/index.js +59 -0
- package/dist/esm/request/ReqQueue/index.js.map +1 -0
- package/dist/esm/request/httpCode/index.js +49 -0
- package/dist/esm/request/httpCode/index.js.map +1 -0
- package/dist/esm/request/httpUtils/index.js +359 -0
- package/dist/esm/request/httpUtils/index.js.map +1 -0
- package/dist/esm/request/index.d.ts +15 -0
- package/dist/esm/request/index.js +166 -0
- package/dist/esm/request/index.js.map +1 -0
- package/dist/esm/request/typings/index.d.ts +184 -0
- package/dist/esm/request/uniRequest/index.js +62 -0
- package/dist/esm/request/uniRequest/index.js.map +1 -0
- package/dist/esm/types/data/index.d.ts +188 -0
- package/dist/esm/types/data/index.js +13 -0
- package/dist/esm/types/data/index.js.map +1 -0
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/uniapp/Tips/index.d.ts +295 -0
- package/dist/esm/uniapp/Tips/index.js +498 -0
- package/dist/esm/uniapp/Tips/index.js.map +1 -0
- package/dist/esm/uniapp/cloudUtils/index.d.ts +56 -0
- package/dist/esm/uniapp/cloudUtils/index.js +90 -0
- package/dist/esm/uniapp/cloudUtils/index.js.map +1 -0
- package/dist/esm/uniapp/index.d.ts +3 -0
- package/dist/esm/uniapp/index.js +4 -0
- package/dist/esm/uniapp/index.js.map +1 -0
- package/dist/esm/uniapp/uniUtils/index.d.ts +113 -0
- package/dist/esm/uniapp/uniUtils/index.js +199 -0
- package/dist/esm/uniapp/uniUtils/index.js.map +1 -0
- package/dist/index.cjs +88 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/request/ReqQueue/index.cjs +63 -0
- package/dist/request/ReqQueue/index.cjs.map +1 -0
- package/dist/request/httpCode/index.cjs +52 -0
- package/dist/request/httpCode/index.cjs.map +1 -0
- package/dist/request/httpUtils/index.cjs +365 -0
- package/dist/request/httpUtils/index.cjs.map +1 -0
- package/dist/request/index.cjs +170 -0
- package/dist/request/index.cjs.map +1 -0
- package/dist/request/index.d.ts +15 -0
- package/dist/request/typings/index.d.ts +184 -0
- package/dist/request/uniRequest/index.cjs +66 -0
- package/dist/request/uniRequest/index.cjs.map +1 -0
- package/dist/types/data/index.cjs +15 -0
- package/dist/types/data/index.cjs.map +1 -0
- package/dist/types/data/index.d.ts +188 -0
- package/dist/types/index.cjs +8 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/uniapp/Tips/index.cjs +521 -0
- package/dist/uniapp/Tips/index.cjs.map +1 -0
- package/dist/uniapp/Tips/index.d.ts +295 -0
- package/dist/uniapp/cloudUtils/index.cjs +92 -0
- package/dist/uniapp/cloudUtils/index.cjs.map +1 -0
- package/dist/uniapp/cloudUtils/index.d.ts +56 -0
- package/dist/uniapp/index.cjs +53 -0
- package/dist/uniapp/index.cjs.map +1 -0
- package/dist/uniapp/index.d.ts +3 -0
- package/dist/uniapp/uniUtils/index.cjs +213 -0
- package/dist/uniapp/uniUtils/index.cjs.map +1 -0
- package/dist/uniapp/uniUtils/index.d.ts +113 -0
- package/package.json +129 -0
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
import CryptoJS from 'crypto-js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 检测是否为浏览器环境
|
|
5
|
+
* @returns {boolean} 如果是浏览器环境返回 true,否则返回 false
|
|
6
|
+
*/
|
|
7
|
+
function isBrowser() {
|
|
8
|
+
return typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 动态导入 uuid 模块
|
|
12
|
+
* @returns {Promise<any>} 返回 uuid 模块的 Promise
|
|
13
|
+
*/
|
|
14
|
+
async function loadUUID() {
|
|
15
|
+
try {
|
|
16
|
+
// 动态导入 uuid 模块以解决 CommonJS/ESM 兼容性问题
|
|
17
|
+
const uuid = await import('uuid');
|
|
18
|
+
return uuid;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw new Error(`加载 uuid 模块失败: ${error}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 检测是否支持 crypto.getRandomValues
|
|
26
|
+
* @returns {boolean} 如果支持返回 true,否则返回 false
|
|
27
|
+
*/
|
|
28
|
+
function supportsCryptoGetRandomValues() {
|
|
29
|
+
return typeof crypto !== 'undefined' &&
|
|
30
|
+
typeof crypto.getRandomValues === 'function';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 生成兼容性的随机字节数组
|
|
34
|
+
* @param {number} size - 需要生成的字节数
|
|
35
|
+
* @returns {Uint8Array} 随机字节数组
|
|
36
|
+
*/
|
|
37
|
+
function getRandomBytes(size) {
|
|
38
|
+
const bytes = new Uint8Array(size);
|
|
39
|
+
// 优先使用 crypto.getRandomValues(现代浏览器和 Node.js)
|
|
40
|
+
if (supportsCryptoGetRandomValues()) {
|
|
41
|
+
crypto.getRandomValues(bytes);
|
|
42
|
+
return bytes;
|
|
43
|
+
}
|
|
44
|
+
// 降级方案:使用 Math.random()
|
|
45
|
+
for (let i = 0; i < size; i++) {
|
|
46
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
47
|
+
}
|
|
48
|
+
return bytes;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 生成兼容性的 UUID v4
|
|
52
|
+
* 当 crypto.getRandomValues 不可用时使用降级方案
|
|
53
|
+
* @returns {string} UUID v4 字符串
|
|
54
|
+
*/
|
|
55
|
+
function generateCompatibleUUID() {
|
|
56
|
+
const bytes = getRandomBytes(16);
|
|
57
|
+
// 设置版本号 (4) 和变体位
|
|
58
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40; // 版本 4
|
|
59
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80; // 变体位
|
|
60
|
+
// 转换为十六进制字符串
|
|
61
|
+
const hex = Array.from(bytes)
|
|
62
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
63
|
+
.join('');
|
|
64
|
+
// 格式化为标准 UUID 格式
|
|
65
|
+
return [
|
|
66
|
+
hex.slice(0, 8),
|
|
67
|
+
hex.slice(8, 12),
|
|
68
|
+
hex.slice(12, 16),
|
|
69
|
+
hex.slice(16, 20),
|
|
70
|
+
hex.slice(20, 32)
|
|
71
|
+
].join('-');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 延迟加载 JSEncrypt(仅在浏览器环境中)
|
|
75
|
+
* @returns {Promise<any>} 返回 JSEncrypt 类的 Promise
|
|
76
|
+
*/
|
|
77
|
+
async function loadJSEncrypt() {
|
|
78
|
+
if (!isBrowser()) {
|
|
79
|
+
throw new Error('JSEncrypt 只能在浏览器环境中使用');
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
// 动态导入 JSEncrypt
|
|
83
|
+
const { default: JSEncrypt } = await import('jsencrypt');
|
|
84
|
+
return JSEncrypt;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
throw new Error(`加载 JSEncrypt 失败: ${error}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 延迟加载 Node.js crypto 模块(仅在 Node.js 环境中)
|
|
92
|
+
* @returns {Promise<any>} 返回 crypto 模块的 Promise
|
|
93
|
+
*/
|
|
94
|
+
async function loadNodeCrypto() {
|
|
95
|
+
if (isBrowser()) {
|
|
96
|
+
throw new Error('Node.js crypto 模块只能在 Node.js 环境中使用');
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
// 动态导入 Node.js crypto 模块
|
|
100
|
+
const crypto = await import('crypto');
|
|
101
|
+
return crypto;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw new Error(`加载 Node.js crypto 模块失败: ${error}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Node.js 环境下的 RSA 加密
|
|
109
|
+
* @param {string} text - 需要加密的文本
|
|
110
|
+
* @param {string} publicKey - RSA 公钥(PEM 格式)
|
|
111
|
+
* @returns {Promise<string | false>} 返回加密后的 Base64 字符串,失败返回 false
|
|
112
|
+
*/
|
|
113
|
+
async function rsaEncryptNode(text, publicKey) {
|
|
114
|
+
try {
|
|
115
|
+
const crypto = await loadNodeCrypto();
|
|
116
|
+
const buffer = Buffer.from(text, 'utf8');
|
|
117
|
+
const encrypted = crypto.publicEncrypt(publicKey, buffer);
|
|
118
|
+
return encrypted.toString('base64');
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('Node.js RSA 加密失败:', error);
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Node.js 环境下的 RSA 解密
|
|
127
|
+
* @param {string} encryptedText - 需要解密的 Base64 字符串
|
|
128
|
+
* @param {string} privateKey - RSA 私钥(PEM 格式)
|
|
129
|
+
* @returns {Promise<string | false>} 返回解密后的原文,失败返回 false
|
|
130
|
+
*/
|
|
131
|
+
async function rsaDecryptNode(encryptedText, privateKey) {
|
|
132
|
+
try {
|
|
133
|
+
const crypto = await loadNodeCrypto();
|
|
134
|
+
const buffer = Buffer.from(encryptedText, 'base64');
|
|
135
|
+
const decrypted = crypto.privateDecrypt(privateKey, buffer);
|
|
136
|
+
return decrypted.toString('utf8');
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.error('Node.js RSA 解密失败:', error);
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Node.js 环境下生成 RSA 密钥对
|
|
145
|
+
* @param {number} keySize - 密钥长度
|
|
146
|
+
* @returns {Promise<{ publicKey: string; privateKey: string } | null>} 返回包含公钥和私钥的对象,失败返回 null
|
|
147
|
+
*/
|
|
148
|
+
async function generateRSAKeyPairNode(keySize) {
|
|
149
|
+
try {
|
|
150
|
+
const crypto = await loadNodeCrypto();
|
|
151
|
+
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
|
|
152
|
+
modulusLength: keySize,
|
|
153
|
+
publicKeyEncoding: {
|
|
154
|
+
type: 'spki',
|
|
155
|
+
format: 'pem'
|
|
156
|
+
},
|
|
157
|
+
privateKeyEncoding: {
|
|
158
|
+
type: 'pkcs8',
|
|
159
|
+
format: 'pem'
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
return { publicKey, privateKey };
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.error('Node.js RSA 密钥对生成失败:', error);
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 浏览器环境下的 RSA 加密
|
|
171
|
+
* @param {string} text - 需要加密的文本
|
|
172
|
+
* @param {string} publicKey - RSA 公钥(PEM 格式)
|
|
173
|
+
* @returns {Promise<string | false>} 返回加密后的 Base64 字符串,失败返回 false
|
|
174
|
+
*/
|
|
175
|
+
async function rsaEncryptBrowser(text, publicKey) {
|
|
176
|
+
try {
|
|
177
|
+
const JSEncrypt = await loadJSEncrypt();
|
|
178
|
+
const encrypt = new JSEncrypt();
|
|
179
|
+
encrypt.setPublicKey(publicKey);
|
|
180
|
+
return encrypt.encrypt(text);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
console.error('浏览器 RSA 加密失败:', error);
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* 浏览器环境下的 RSA 解密
|
|
189
|
+
* @param {string} encryptedText - 需要解密的 Base64 字符串
|
|
190
|
+
* @param {string} privateKey - RSA 私钥(PEM 格式)
|
|
191
|
+
* @returns {Promise<string | false>} 返回解密后的原文,失败返回 false
|
|
192
|
+
*/
|
|
193
|
+
async function rsaDecryptBrowser(encryptedText, privateKey) {
|
|
194
|
+
try {
|
|
195
|
+
const JSEncrypt = await loadJSEncrypt();
|
|
196
|
+
const decrypt = new JSEncrypt();
|
|
197
|
+
decrypt.setPrivateKey(privateKey);
|
|
198
|
+
return decrypt.decrypt(encryptedText);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
console.error('浏览器 RSA 解密失败:', error);
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* 浏览器环境下生成 RSA 密钥对
|
|
207
|
+
* @param {number} keySize - 密钥长度
|
|
208
|
+
* @returns {Promise<{ publicKey: string; privateKey: string } | null>} 返回包含公钥和私钥的对象,失败返回 null
|
|
209
|
+
*/
|
|
210
|
+
async function generateRSAKeyPairBrowser(keySize) {
|
|
211
|
+
try {
|
|
212
|
+
const JSEncrypt = await loadJSEncrypt();
|
|
213
|
+
const encrypt = new JSEncrypt({ default_key_size: keySize.toString() });
|
|
214
|
+
return {
|
|
215
|
+
publicKey: encrypt.getPublicKey(),
|
|
216
|
+
privateKey: encrypt.getPrivateKey()
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
console.error('浏览器 RSA 密钥对生成失败:', error);
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* 加密工具类
|
|
226
|
+
* 提供 UUID 生成、MD5 哈希、RSA 加密解密、AES 对称加密等功能
|
|
227
|
+
*/
|
|
228
|
+
const cryptoUtils = {
|
|
229
|
+
/**
|
|
230
|
+
* 生成 UUID v4
|
|
231
|
+
* @returns {Promise<string>} 返回一个随机生成的 UUID v4 字符串
|
|
232
|
+
* @example
|
|
233
|
+
* ```typescript
|
|
234
|
+
* const uuid = await cryptoUtils.uuid();
|
|
235
|
+
* console.log(uuid); // "550e8400e29b41d4a716446655440000"
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
async uuid() {
|
|
239
|
+
try {
|
|
240
|
+
// 优先尝试使用 uuid 库
|
|
241
|
+
if (supportsCryptoGetRandomValues()) {
|
|
242
|
+
const { v4: uuidv4 } = await loadUUID();
|
|
243
|
+
return uuidv4().replace(/-/g, '');
|
|
244
|
+
}
|
|
245
|
+
// 在不支持 crypto.getRandomValues 的环境中使用兼容性方案
|
|
246
|
+
console.warn('crypto.getRandomValues 不可用,使用兼容性 UUID 生成方案');
|
|
247
|
+
return generateCompatibleUUID().replace(/-/g, '');
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
// 如果 uuid 库加载失败,也使用兼容性方案
|
|
251
|
+
console.warn('UUID 库加载失败,使用兼容性 UUID 生成方案:', error);
|
|
252
|
+
return generateCompatibleUUID().replace(/-/g, '');
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
/**
|
|
256
|
+
* 生成字符串的 MD5 哈希值
|
|
257
|
+
* @param {string} input - 需要进行 MD5 加密的输入字符串
|
|
258
|
+
* @param {string} [salt] - 可选的盐值,用于增强安全性
|
|
259
|
+
* @returns {string} 返回 MD5 哈希值的十六进制字符串
|
|
260
|
+
* @example
|
|
261
|
+
* ```typescript
|
|
262
|
+
* // 基础 MD5
|
|
263
|
+
* const hash1 = cryptoUtils.md5('hello world');
|
|
264
|
+
* console.log(hash1); // "5d41402abc4b2a76b9719d911017c592"
|
|
265
|
+
*
|
|
266
|
+
* // 带盐值的 MD5
|
|
267
|
+
* const hash2 = cryptoUtils.md5('password', 'mysalt');
|
|
268
|
+
* console.log(hash2); // "a1b2c3d4e5f6..."
|
|
269
|
+
* ```
|
|
270
|
+
*/
|
|
271
|
+
md5(input, salt) {
|
|
272
|
+
const data = salt ? input + salt : input;
|
|
273
|
+
return CryptoJS.MD5(data).toString();
|
|
274
|
+
},
|
|
275
|
+
/**
|
|
276
|
+
* 生成简短的 UUID(8位)
|
|
277
|
+
* @returns {string} 返回一个8位的短 UUID 字符串
|
|
278
|
+
* @example
|
|
279
|
+
* ```typescript
|
|
280
|
+
* const shortUuid = cryptoUtils.miniUuid();
|
|
281
|
+
* console.log(shortUuid); // "a1b2c3d4"
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
284
|
+
miniUuid() {
|
|
285
|
+
return Math.random().toString(36).substring(2, 10);
|
|
286
|
+
},
|
|
287
|
+
/**
|
|
288
|
+
* 验证 UUID 格式是否正确
|
|
289
|
+
* @param {string} uuid - 需要验证的 UUID 字符串
|
|
290
|
+
* @returns {Promise<boolean>} 如果格式正确返回 true,否则返回 false
|
|
291
|
+
* @example
|
|
292
|
+
* ```typescript
|
|
293
|
+
* const isValid = await cryptoUtils.isValidUUID('550e8400-e29b-41d4-a716-446655440000');
|
|
294
|
+
* console.log(isValid); // true
|
|
295
|
+
* ```
|
|
296
|
+
*/
|
|
297
|
+
async isValidUUID(uuid) {
|
|
298
|
+
try {
|
|
299
|
+
const { validate: validateUUID } = await loadUUID();
|
|
300
|
+
return validateUUID(uuid);
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
console.warn(`UUID 库加载失败:${error}`);
|
|
304
|
+
// 如果 uuid 库不可用,使用正则表达式验证
|
|
305
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
306
|
+
return uuidRegex.test(uuid);
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
/**
|
|
310
|
+
* RSA 加密(跨环境兼容)
|
|
311
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
312
|
+
* @param {string} text - 需要加密的文本
|
|
313
|
+
* @param {string} publicKey - RSA 公钥(PEM 格式)
|
|
314
|
+
* @returns {Promise<string | false>} 返回加密后的 Base64 字符串,失败返回 false
|
|
315
|
+
* @example
|
|
316
|
+
* ```typescript
|
|
317
|
+
* const publicKey = `-----BEGIN PUBLIC KEY-----
|
|
318
|
+
* MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o...
|
|
319
|
+
* -----END PUBLIC KEY-----`;
|
|
320
|
+
*
|
|
321
|
+
* const encrypted = await cryptoUtils.rsaEncrypt('Hello World', publicKey);
|
|
322
|
+
* console.log(encrypted); // "base64 encrypted string"
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
325
|
+
async rsaEncrypt(text, publicKey) {
|
|
326
|
+
if (isBrowser()) {
|
|
327
|
+
return await rsaEncryptBrowser(text, publicKey);
|
|
328
|
+
}
|
|
329
|
+
return await rsaEncryptNode(text, publicKey);
|
|
330
|
+
},
|
|
331
|
+
/**
|
|
332
|
+
* RSA 解密(跨环境兼容)
|
|
333
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
334
|
+
* @param {string} encryptedText - 需要解密的 Base64 字符串
|
|
335
|
+
* @param {string} privateKey - RSA 私钥(PEM 格式)
|
|
336
|
+
* @returns {Promise<string | false>} 返回解密后的原文,失败返回 false
|
|
337
|
+
* @example
|
|
338
|
+
* ```typescript
|
|
339
|
+
* const privateKey = `-----BEGIN PRIVATE KEY-----
|
|
340
|
+
* MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL...
|
|
341
|
+
* -----END PRIVATE KEY-----`;
|
|
342
|
+
*
|
|
343
|
+
* const decrypted = await cryptoUtils.rsaDecrypt(encryptedText, privateKey);
|
|
344
|
+
* console.log(decrypted); // "Hello World"
|
|
345
|
+
* ```
|
|
346
|
+
*/
|
|
347
|
+
async rsaDecrypt(encryptedText, privateKey) {
|
|
348
|
+
if (isBrowser()) {
|
|
349
|
+
return await rsaDecryptBrowser(encryptedText, privateKey);
|
|
350
|
+
}
|
|
351
|
+
return await rsaDecryptNode(encryptedText, privateKey);
|
|
352
|
+
},
|
|
353
|
+
/**
|
|
354
|
+
* 生成 RSA 密钥对(跨环境兼容)
|
|
355
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
356
|
+
* @param {number} [keySize=1024] - 密钥长度,默认 1024 位
|
|
357
|
+
* @returns {Promise<{ publicKey: string; privateKey: string } | null>} 返回包含公钥和私钥的对象,失败返回 null
|
|
358
|
+
* @example
|
|
359
|
+
* ```typescript
|
|
360
|
+
* const keyPair = await cryptoUtils.generateRSAKeyPair(2048);
|
|
361
|
+
* if (keyPair) {
|
|
362
|
+
* console.log(keyPair.publicKey); // "-----BEGIN PUBLIC KEY-----..."
|
|
363
|
+
* console.log(keyPair.privateKey); // "-----BEGIN PRIVATE KEY-----..."
|
|
364
|
+
* }
|
|
365
|
+
* ```
|
|
366
|
+
*/
|
|
367
|
+
async generateRSAKeyPair(keySize = 1024) {
|
|
368
|
+
if (isBrowser()) {
|
|
369
|
+
return await generateRSAKeyPairBrowser(keySize);
|
|
370
|
+
}
|
|
371
|
+
return await generateRSAKeyPairNode(keySize);
|
|
372
|
+
},
|
|
373
|
+
/**
|
|
374
|
+
* AES 加密(使用字符串密钥)
|
|
375
|
+
* @param {string} text - 需要加密的文本
|
|
376
|
+
* @param {string} key - 加密密钥(字符串)
|
|
377
|
+
* @returns {string} 返回加密后的文本(包含 IV 和密文)
|
|
378
|
+
* @example
|
|
379
|
+
* ```typescript
|
|
380
|
+
* const encrypted = cryptoUtils.aesEncrypt('Hello World', 'mySecretKey123');
|
|
381
|
+
* console.log(encrypted); // "iv:ciphertext"
|
|
382
|
+
* ```
|
|
383
|
+
*/
|
|
384
|
+
aesEncrypt(text, key) {
|
|
385
|
+
try {
|
|
386
|
+
// 使用 CryptoJS 进行 AES 加密
|
|
387
|
+
const encrypted = CryptoJS.AES.encrypt(text, key).toString();
|
|
388
|
+
return encrypted;
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
console.error('AES 加密失败:', error);
|
|
392
|
+
throw new Error('AES 加密失败');
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
/**
|
|
396
|
+
* AES 解密(使用字符串密钥)
|
|
397
|
+
* @param {string} encryptedText - 需要解密的文本(包含 IV 和密文)
|
|
398
|
+
* @param {string} key - 解密密钥(字符串)
|
|
399
|
+
* @returns {string} 返回解密后的原文
|
|
400
|
+
* @example
|
|
401
|
+
* ```typescript
|
|
402
|
+
* const decrypted = cryptoUtils.aesDecrypt(encryptedText, 'mySecretKey123');
|
|
403
|
+
* console.log(decrypted); // "Hello World"
|
|
404
|
+
* ```
|
|
405
|
+
*/
|
|
406
|
+
aesDecrypt(encryptedText, key) {
|
|
407
|
+
try {
|
|
408
|
+
// 使用 CryptoJS 进行 AES 解密
|
|
409
|
+
const decrypted = CryptoJS.AES.decrypt(encryptedText, key);
|
|
410
|
+
const decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
|
|
411
|
+
if (!decryptedText) {
|
|
412
|
+
throw new Error('解密失败,可能是密钥错误或数据损坏');
|
|
413
|
+
}
|
|
414
|
+
return decryptedText;
|
|
415
|
+
}
|
|
416
|
+
catch (error) {
|
|
417
|
+
console.error('AES 解密失败:', error);
|
|
418
|
+
throw new Error('AES 解密失败');
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
export { cryptoUtils as default };
|
|
424
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/core/cryptoUtils/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Dayjs } from 'dayjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 日期工具函数
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 日期工具对象
|
|
9
|
+
*/
|
|
10
|
+
declare const dateUtils: {
|
|
11
|
+
/**
|
|
12
|
+
* 格式化日期
|
|
13
|
+
* @param date 日期对象或时间戳
|
|
14
|
+
* @param format 格式字符串,如 'YYYY-MM-DD HH:mm:ss'
|
|
15
|
+
* @returns 格式化后的日期字符串
|
|
16
|
+
*/
|
|
17
|
+
formatDate(date: Date | number | string, format?: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* 获取相对时间描述
|
|
20
|
+
* @param date 日期对象或时间戳
|
|
21
|
+
* @returns 相对时间描述,如 '2小时前'
|
|
22
|
+
*/
|
|
23
|
+
timeAgo(date: Date | number | string): string;
|
|
24
|
+
/**
|
|
25
|
+
* 添加时间
|
|
26
|
+
* @param date 日期对象或时间戳
|
|
27
|
+
* @param amount 数量
|
|
28
|
+
* @param unit 单位:'years' | 'months' | 'days' | 'hours' | 'minutes' | 'seconds'
|
|
29
|
+
* @returns 新的日期对象
|
|
30
|
+
*/
|
|
31
|
+
addTime(date: Date | number | string, amount: number, unit: "years" | "months" | "days" | "hours" | "minutes" | "seconds"): Date;
|
|
32
|
+
/**
|
|
33
|
+
* 获取日期范围的开始和结束
|
|
34
|
+
* @param date 日期对象或时间戳
|
|
35
|
+
* @param unit 单位:'day' | 'week' | 'month' | 'year'
|
|
36
|
+
* @returns 包含开始和结束日期的对象
|
|
37
|
+
*/
|
|
38
|
+
getDateRange(date: Date | number | string, unit: "day" | "week" | "month" | "year"): {
|
|
39
|
+
start: Date;
|
|
40
|
+
end: Date;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* 判断是否为同一天
|
|
44
|
+
* @param date1 日期1
|
|
45
|
+
* @param date2 日期2
|
|
46
|
+
* @returns 是否为同一天
|
|
47
|
+
*/
|
|
48
|
+
isSameDay(date1: Date | number | string, date2: Date | number | string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* 判断是否为闰年
|
|
51
|
+
* @param year 年份
|
|
52
|
+
* @returns 是否为闰年
|
|
53
|
+
*/
|
|
54
|
+
isLeapYear(year: number): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 获取月份天数
|
|
57
|
+
* @param year 年份
|
|
58
|
+
* @param month 月份(0-11)
|
|
59
|
+
* @returns 天数
|
|
60
|
+
*/
|
|
61
|
+
getDaysInMonth(year: number, month: number): number;
|
|
62
|
+
/**
|
|
63
|
+
* 获取最近几年的年份选项
|
|
64
|
+
* @param num 几年?默认三年(向上取)
|
|
65
|
+
* @returns 年份选项数组
|
|
66
|
+
*/
|
|
67
|
+
getYearOptions(num?: number): Array<{
|
|
68
|
+
id: number;
|
|
69
|
+
text: number;
|
|
70
|
+
}>;
|
|
71
|
+
/**
|
|
72
|
+
* 获取最近几年的年份选项(向下取)
|
|
73
|
+
* @param num 几年?默认三年(向下取)
|
|
74
|
+
* @returns 年份选项数组
|
|
75
|
+
*/
|
|
76
|
+
getPastYearOptions(num?: number): Array<{
|
|
77
|
+
id: number;
|
|
78
|
+
text: number;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* 格式化时间显示
|
|
82
|
+
* @param timestamp 时间戳(字符串或数字)
|
|
83
|
+
* @returns 格式化后的时间显示字符串
|
|
84
|
+
*/
|
|
85
|
+
formatTime(timestamp: string | number): string;
|
|
86
|
+
/**
|
|
87
|
+
* 根据当前的时间,来生成是凌晨、早上、中午、下午、晚上,返回对应的字符串
|
|
88
|
+
*/
|
|
89
|
+
getDayTimeStr: (date?: Dayjs) => "" | "凌晨" | "上午" | "中午" | "下午" | "晚上";
|
|
90
|
+
/**
|
|
91
|
+
* 安全格式化日期
|
|
92
|
+
*
|
|
93
|
+
* @param date - 要格式化的日期,可以是字符串、数字、Date 对象或 dayjs 对象
|
|
94
|
+
* @param format - 输出的日期格式,默认为 "YYYY-MM-DD"
|
|
95
|
+
* @returns 格式化后的日期字符串;如果输入无效,则返回 "-"
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* safeFormat("2025-09-20") // "2025-09-20"
|
|
99
|
+
* safeFormat("2025-13-40") // "-"
|
|
100
|
+
* safeFormat(new Date(), "YYYY/MM/DD HH:mm") // "2025/09/20 16:30"
|
|
101
|
+
*/
|
|
102
|
+
safeFormat: (date: any, format?: string) => string;
|
|
103
|
+
/**
|
|
104
|
+
* 安全格式化时间
|
|
105
|
+
*/
|
|
106
|
+
safeFormatTime: (date: any, format?: string) => string;
|
|
107
|
+
/**
|
|
108
|
+
* 格式化日期范围显示
|
|
109
|
+
* 将开始时间和结束时间格式化为范围显示
|
|
110
|
+
* @param startTime 开始时间
|
|
111
|
+
* @param endTime 结束时间
|
|
112
|
+
* @returns 格式化后的日期范围字符串
|
|
113
|
+
*/
|
|
114
|
+
formatDateRange: (startTime?: string, endTime?: string) => string;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export { dateUtils as default };
|