@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,428 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var CryptoJS = require('crypto-js');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 检测是否为浏览器环境
|
|
9
|
+
* @returns {boolean} 如果是浏览器环境返回 true,否则返回 false
|
|
10
|
+
*/
|
|
11
|
+
function isBrowser() {
|
|
12
|
+
return typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 动态导入 uuid 模块
|
|
16
|
+
* @returns {Promise<any>} 返回 uuid 模块的 Promise
|
|
17
|
+
*/
|
|
18
|
+
async function loadUUID() {
|
|
19
|
+
try {
|
|
20
|
+
// 动态导入 uuid 模块以解决 CommonJS/ESM 兼容性问题
|
|
21
|
+
const uuid = await import('uuid');
|
|
22
|
+
return uuid;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
throw new Error(`加载 uuid 模块失败: ${error}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 检测是否支持 crypto.getRandomValues
|
|
30
|
+
* @returns {boolean} 如果支持返回 true,否则返回 false
|
|
31
|
+
*/
|
|
32
|
+
function supportsCryptoGetRandomValues() {
|
|
33
|
+
return typeof crypto !== 'undefined' &&
|
|
34
|
+
typeof crypto.getRandomValues === 'function';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 生成兼容性的随机字节数组
|
|
38
|
+
* @param {number} size - 需要生成的字节数
|
|
39
|
+
* @returns {Uint8Array} 随机字节数组
|
|
40
|
+
*/
|
|
41
|
+
function getRandomBytes(size) {
|
|
42
|
+
const bytes = new Uint8Array(size);
|
|
43
|
+
// 优先使用 crypto.getRandomValues(现代浏览器和 Node.js)
|
|
44
|
+
if (supportsCryptoGetRandomValues()) {
|
|
45
|
+
crypto.getRandomValues(bytes);
|
|
46
|
+
return bytes;
|
|
47
|
+
}
|
|
48
|
+
// 降级方案:使用 Math.random()
|
|
49
|
+
for (let i = 0; i < size; i++) {
|
|
50
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
51
|
+
}
|
|
52
|
+
return bytes;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 生成兼容性的 UUID v4
|
|
56
|
+
* 当 crypto.getRandomValues 不可用时使用降级方案
|
|
57
|
+
* @returns {string} UUID v4 字符串
|
|
58
|
+
*/
|
|
59
|
+
function generateCompatibleUUID() {
|
|
60
|
+
const bytes = getRandomBytes(16);
|
|
61
|
+
// 设置版本号 (4) 和变体位
|
|
62
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40; // 版本 4
|
|
63
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80; // 变体位
|
|
64
|
+
// 转换为十六进制字符串
|
|
65
|
+
const hex = Array.from(bytes)
|
|
66
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
67
|
+
.join('');
|
|
68
|
+
// 格式化为标准 UUID 格式
|
|
69
|
+
return [
|
|
70
|
+
hex.slice(0, 8),
|
|
71
|
+
hex.slice(8, 12),
|
|
72
|
+
hex.slice(12, 16),
|
|
73
|
+
hex.slice(16, 20),
|
|
74
|
+
hex.slice(20, 32)
|
|
75
|
+
].join('-');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 延迟加载 JSEncrypt(仅在浏览器环境中)
|
|
79
|
+
* @returns {Promise<any>} 返回 JSEncrypt 类的 Promise
|
|
80
|
+
*/
|
|
81
|
+
async function loadJSEncrypt() {
|
|
82
|
+
if (!isBrowser()) {
|
|
83
|
+
throw new Error('JSEncrypt 只能在浏览器环境中使用');
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
// 动态导入 JSEncrypt
|
|
87
|
+
const { default: JSEncrypt } = await import('jsencrypt');
|
|
88
|
+
return JSEncrypt;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw new Error(`加载 JSEncrypt 失败: ${error}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 延迟加载 Node.js crypto 模块(仅在 Node.js 环境中)
|
|
96
|
+
* @returns {Promise<any>} 返回 crypto 模块的 Promise
|
|
97
|
+
*/
|
|
98
|
+
async function loadNodeCrypto() {
|
|
99
|
+
if (isBrowser()) {
|
|
100
|
+
throw new Error('Node.js crypto 模块只能在 Node.js 环境中使用');
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
// 动态导入 Node.js crypto 模块
|
|
104
|
+
const crypto = await import('crypto');
|
|
105
|
+
return crypto;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw new Error(`加载 Node.js crypto 模块失败: ${error}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Node.js 环境下的 RSA 加密
|
|
113
|
+
* @param {string} text - 需要加密的文本
|
|
114
|
+
* @param {string} publicKey - RSA 公钥(PEM 格式)
|
|
115
|
+
* @returns {Promise<string | false>} 返回加密后的 Base64 字符串,失败返回 false
|
|
116
|
+
*/
|
|
117
|
+
async function rsaEncryptNode(text, publicKey) {
|
|
118
|
+
try {
|
|
119
|
+
const crypto = await loadNodeCrypto();
|
|
120
|
+
const buffer = Buffer.from(text, 'utf8');
|
|
121
|
+
const encrypted = crypto.publicEncrypt(publicKey, buffer);
|
|
122
|
+
return encrypted.toString('base64');
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error('Node.js RSA 加密失败:', error);
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Node.js 环境下的 RSA 解密
|
|
131
|
+
* @param {string} encryptedText - 需要解密的 Base64 字符串
|
|
132
|
+
* @param {string} privateKey - RSA 私钥(PEM 格式)
|
|
133
|
+
* @returns {Promise<string | false>} 返回解密后的原文,失败返回 false
|
|
134
|
+
*/
|
|
135
|
+
async function rsaDecryptNode(encryptedText, privateKey) {
|
|
136
|
+
try {
|
|
137
|
+
const crypto = await loadNodeCrypto();
|
|
138
|
+
const buffer = Buffer.from(encryptedText, 'base64');
|
|
139
|
+
const decrypted = crypto.privateDecrypt(privateKey, buffer);
|
|
140
|
+
return decrypted.toString('utf8');
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.error('Node.js RSA 解密失败:', error);
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Node.js 环境下生成 RSA 密钥对
|
|
149
|
+
* @param {number} keySize - 密钥长度
|
|
150
|
+
* @returns {Promise<{ publicKey: string; privateKey: string } | null>} 返回包含公钥和私钥的对象,失败返回 null
|
|
151
|
+
*/
|
|
152
|
+
async function generateRSAKeyPairNode(keySize) {
|
|
153
|
+
try {
|
|
154
|
+
const crypto = await loadNodeCrypto();
|
|
155
|
+
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
|
|
156
|
+
modulusLength: keySize,
|
|
157
|
+
publicKeyEncoding: {
|
|
158
|
+
type: 'spki',
|
|
159
|
+
format: 'pem'
|
|
160
|
+
},
|
|
161
|
+
privateKeyEncoding: {
|
|
162
|
+
type: 'pkcs8',
|
|
163
|
+
format: 'pem'
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
return { publicKey, privateKey };
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error('Node.js RSA 密钥对生成失败:', error);
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* 浏览器环境下的 RSA 加密
|
|
175
|
+
* @param {string} text - 需要加密的文本
|
|
176
|
+
* @param {string} publicKey - RSA 公钥(PEM 格式)
|
|
177
|
+
* @returns {Promise<string | false>} 返回加密后的 Base64 字符串,失败返回 false
|
|
178
|
+
*/
|
|
179
|
+
async function rsaEncryptBrowser(text, publicKey) {
|
|
180
|
+
try {
|
|
181
|
+
const JSEncrypt = await loadJSEncrypt();
|
|
182
|
+
const encrypt = new JSEncrypt();
|
|
183
|
+
encrypt.setPublicKey(publicKey);
|
|
184
|
+
return encrypt.encrypt(text);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error('浏览器 RSA 加密失败:', error);
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* 浏览器环境下的 RSA 解密
|
|
193
|
+
* @param {string} encryptedText - 需要解密的 Base64 字符串
|
|
194
|
+
* @param {string} privateKey - RSA 私钥(PEM 格式)
|
|
195
|
+
* @returns {Promise<string | false>} 返回解密后的原文,失败返回 false
|
|
196
|
+
*/
|
|
197
|
+
async function rsaDecryptBrowser(encryptedText, privateKey) {
|
|
198
|
+
try {
|
|
199
|
+
const JSEncrypt = await loadJSEncrypt();
|
|
200
|
+
const decrypt = new JSEncrypt();
|
|
201
|
+
decrypt.setPrivateKey(privateKey);
|
|
202
|
+
return decrypt.decrypt(encryptedText);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
console.error('浏览器 RSA 解密失败:', error);
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 浏览器环境下生成 RSA 密钥对
|
|
211
|
+
* @param {number} keySize - 密钥长度
|
|
212
|
+
* @returns {Promise<{ publicKey: string; privateKey: string } | null>} 返回包含公钥和私钥的对象,失败返回 null
|
|
213
|
+
*/
|
|
214
|
+
async function generateRSAKeyPairBrowser(keySize) {
|
|
215
|
+
try {
|
|
216
|
+
const JSEncrypt = await loadJSEncrypt();
|
|
217
|
+
const encrypt = new JSEncrypt({ default_key_size: keySize.toString() });
|
|
218
|
+
return {
|
|
219
|
+
publicKey: encrypt.getPublicKey(),
|
|
220
|
+
privateKey: encrypt.getPrivateKey()
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
console.error('浏览器 RSA 密钥对生成失败:', error);
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* 加密工具类
|
|
230
|
+
* 提供 UUID 生成、MD5 哈希、RSA 加密解密、AES 对称加密等功能
|
|
231
|
+
*/
|
|
232
|
+
const cryptoUtils = {
|
|
233
|
+
/**
|
|
234
|
+
* 生成 UUID v4
|
|
235
|
+
* @returns {Promise<string>} 返回一个随机生成的 UUID v4 字符串
|
|
236
|
+
* @example
|
|
237
|
+
* ```typescript
|
|
238
|
+
* const uuid = await cryptoUtils.uuid();
|
|
239
|
+
* console.log(uuid); // "550e8400e29b41d4a716446655440000"
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
async uuid() {
|
|
243
|
+
try {
|
|
244
|
+
// 优先尝试使用 uuid 库
|
|
245
|
+
if (supportsCryptoGetRandomValues()) {
|
|
246
|
+
const { v4: uuidv4 } = await loadUUID();
|
|
247
|
+
return uuidv4().replace(/-/g, '');
|
|
248
|
+
}
|
|
249
|
+
// 在不支持 crypto.getRandomValues 的环境中使用兼容性方案
|
|
250
|
+
console.warn('crypto.getRandomValues 不可用,使用兼容性 UUID 生成方案');
|
|
251
|
+
return generateCompatibleUUID().replace(/-/g, '');
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
// 如果 uuid 库加载失败,也使用兼容性方案
|
|
255
|
+
console.warn('UUID 库加载失败,使用兼容性 UUID 生成方案:', error);
|
|
256
|
+
return generateCompatibleUUID().replace(/-/g, '');
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
/**
|
|
260
|
+
* 生成字符串的 MD5 哈希值
|
|
261
|
+
* @param {string} input - 需要进行 MD5 加密的输入字符串
|
|
262
|
+
* @param {string} [salt] - 可选的盐值,用于增强安全性
|
|
263
|
+
* @returns {string} 返回 MD5 哈希值的十六进制字符串
|
|
264
|
+
* @example
|
|
265
|
+
* ```typescript
|
|
266
|
+
* // 基础 MD5
|
|
267
|
+
* const hash1 = cryptoUtils.md5('hello world');
|
|
268
|
+
* console.log(hash1); // "5d41402abc4b2a76b9719d911017c592"
|
|
269
|
+
*
|
|
270
|
+
* // 带盐值的 MD5
|
|
271
|
+
* const hash2 = cryptoUtils.md5('password', 'mysalt');
|
|
272
|
+
* console.log(hash2); // "a1b2c3d4e5f6..."
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
md5(input, salt) {
|
|
276
|
+
const data = salt ? input + salt : input;
|
|
277
|
+
return CryptoJS.MD5(data).toString();
|
|
278
|
+
},
|
|
279
|
+
/**
|
|
280
|
+
* 生成简短的 UUID(8位)
|
|
281
|
+
* @returns {string} 返回一个8位的短 UUID 字符串
|
|
282
|
+
* @example
|
|
283
|
+
* ```typescript
|
|
284
|
+
* const shortUuid = cryptoUtils.miniUuid();
|
|
285
|
+
* console.log(shortUuid); // "a1b2c3d4"
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
miniUuid() {
|
|
289
|
+
return Math.random().toString(36).substring(2, 10);
|
|
290
|
+
},
|
|
291
|
+
/**
|
|
292
|
+
* 验证 UUID 格式是否正确
|
|
293
|
+
* @param {string} uuid - 需要验证的 UUID 字符串
|
|
294
|
+
* @returns {Promise<boolean>} 如果格式正确返回 true,否则返回 false
|
|
295
|
+
* @example
|
|
296
|
+
* ```typescript
|
|
297
|
+
* const isValid = await cryptoUtils.isValidUUID('550e8400-e29b-41d4-a716-446655440000');
|
|
298
|
+
* console.log(isValid); // true
|
|
299
|
+
* ```
|
|
300
|
+
*/
|
|
301
|
+
async isValidUUID(uuid) {
|
|
302
|
+
try {
|
|
303
|
+
const { validate: validateUUID } = await loadUUID();
|
|
304
|
+
return validateUUID(uuid);
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
console.warn(`UUID 库加载失败:${error}`);
|
|
308
|
+
// 如果 uuid 库不可用,使用正则表达式验证
|
|
309
|
+
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;
|
|
310
|
+
return uuidRegex.test(uuid);
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
/**
|
|
314
|
+
* RSA 加密(跨环境兼容)
|
|
315
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
316
|
+
* @param {string} text - 需要加密的文本
|
|
317
|
+
* @param {string} publicKey - RSA 公钥(PEM 格式)
|
|
318
|
+
* @returns {Promise<string | false>} 返回加密后的 Base64 字符串,失败返回 false
|
|
319
|
+
* @example
|
|
320
|
+
* ```typescript
|
|
321
|
+
* const publicKey = `-----BEGIN PUBLIC KEY-----
|
|
322
|
+
* MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o...
|
|
323
|
+
* -----END PUBLIC KEY-----`;
|
|
324
|
+
*
|
|
325
|
+
* const encrypted = await cryptoUtils.rsaEncrypt('Hello World', publicKey);
|
|
326
|
+
* console.log(encrypted); // "base64 encrypted string"
|
|
327
|
+
* ```
|
|
328
|
+
*/
|
|
329
|
+
async rsaEncrypt(text, publicKey) {
|
|
330
|
+
if (isBrowser()) {
|
|
331
|
+
return await rsaEncryptBrowser(text, publicKey);
|
|
332
|
+
}
|
|
333
|
+
return await rsaEncryptNode(text, publicKey);
|
|
334
|
+
},
|
|
335
|
+
/**
|
|
336
|
+
* RSA 解密(跨环境兼容)
|
|
337
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
338
|
+
* @param {string} encryptedText - 需要解密的 Base64 字符串
|
|
339
|
+
* @param {string} privateKey - RSA 私钥(PEM 格式)
|
|
340
|
+
* @returns {Promise<string | false>} 返回解密后的原文,失败返回 false
|
|
341
|
+
* @example
|
|
342
|
+
* ```typescript
|
|
343
|
+
* const privateKey = `-----BEGIN PRIVATE KEY-----
|
|
344
|
+
* MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL...
|
|
345
|
+
* -----END PRIVATE KEY-----`;
|
|
346
|
+
*
|
|
347
|
+
* const decrypted = await cryptoUtils.rsaDecrypt(encryptedText, privateKey);
|
|
348
|
+
* console.log(decrypted); // "Hello World"
|
|
349
|
+
* ```
|
|
350
|
+
*/
|
|
351
|
+
async rsaDecrypt(encryptedText, privateKey) {
|
|
352
|
+
if (isBrowser()) {
|
|
353
|
+
return await rsaDecryptBrowser(encryptedText, privateKey);
|
|
354
|
+
}
|
|
355
|
+
return await rsaDecryptNode(encryptedText, privateKey);
|
|
356
|
+
},
|
|
357
|
+
/**
|
|
358
|
+
* 生成 RSA 密钥对(跨环境兼容)
|
|
359
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
360
|
+
* @param {number} [keySize=1024] - 密钥长度,默认 1024 位
|
|
361
|
+
* @returns {Promise<{ publicKey: string; privateKey: string } | null>} 返回包含公钥和私钥的对象,失败返回 null
|
|
362
|
+
* @example
|
|
363
|
+
* ```typescript
|
|
364
|
+
* const keyPair = await cryptoUtils.generateRSAKeyPair(2048);
|
|
365
|
+
* if (keyPair) {
|
|
366
|
+
* console.log(keyPair.publicKey); // "-----BEGIN PUBLIC KEY-----..."
|
|
367
|
+
* console.log(keyPair.privateKey); // "-----BEGIN PRIVATE KEY-----..."
|
|
368
|
+
* }
|
|
369
|
+
* ```
|
|
370
|
+
*/
|
|
371
|
+
async generateRSAKeyPair(keySize = 1024) {
|
|
372
|
+
if (isBrowser()) {
|
|
373
|
+
return await generateRSAKeyPairBrowser(keySize);
|
|
374
|
+
}
|
|
375
|
+
return await generateRSAKeyPairNode(keySize);
|
|
376
|
+
},
|
|
377
|
+
/**
|
|
378
|
+
* AES 加密(使用字符串密钥)
|
|
379
|
+
* @param {string} text - 需要加密的文本
|
|
380
|
+
* @param {string} key - 加密密钥(字符串)
|
|
381
|
+
* @returns {string} 返回加密后的文本(包含 IV 和密文)
|
|
382
|
+
* @example
|
|
383
|
+
* ```typescript
|
|
384
|
+
* const encrypted = cryptoUtils.aesEncrypt('Hello World', 'mySecretKey123');
|
|
385
|
+
* console.log(encrypted); // "iv:ciphertext"
|
|
386
|
+
* ```
|
|
387
|
+
*/
|
|
388
|
+
aesEncrypt(text, key) {
|
|
389
|
+
try {
|
|
390
|
+
// 使用 CryptoJS 进行 AES 加密
|
|
391
|
+
const encrypted = CryptoJS.AES.encrypt(text, key).toString();
|
|
392
|
+
return encrypted;
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
console.error('AES 加密失败:', error);
|
|
396
|
+
throw new Error('AES 加密失败');
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
/**
|
|
400
|
+
* AES 解密(使用字符串密钥)
|
|
401
|
+
* @param {string} encryptedText - 需要解密的文本(包含 IV 和密文)
|
|
402
|
+
* @param {string} key - 解密密钥(字符串)
|
|
403
|
+
* @returns {string} 返回解密后的原文
|
|
404
|
+
* @example
|
|
405
|
+
* ```typescript
|
|
406
|
+
* const decrypted = cryptoUtils.aesDecrypt(encryptedText, 'mySecretKey123');
|
|
407
|
+
* console.log(decrypted); // "Hello World"
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
410
|
+
aesDecrypt(encryptedText, key) {
|
|
411
|
+
try {
|
|
412
|
+
// 使用 CryptoJS 进行 AES 解密
|
|
413
|
+
const decrypted = CryptoJS.AES.decrypt(encryptedText, key);
|
|
414
|
+
const decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
|
|
415
|
+
if (!decryptedText) {
|
|
416
|
+
throw new Error('解密失败,可能是密钥错误或数据损坏');
|
|
417
|
+
}
|
|
418
|
+
return decryptedText;
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
console.error('AES 解密失败:', error);
|
|
422
|
+
throw new Error('AES 解密失败');
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
exports.default = cryptoUtils;
|
|
428
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/core/cryptoUtils/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAEA;;;AAGG;AACH,SAAS,SAAS,GAAA;IAChB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW;AAChF;AAEA;;;AAGG;AACH,eAAe,QAAQ,GAAA;AACrB,IAAA,IAAI;;AAEF,QAAA,MAAM,IAAI,GAAG,MAAM,OAAO,MAAM,CAAC;AACjC,QAAA,OAAO,IAAI;IACb;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC;IAC3C;AACF;AAEA;;;AAGG;AACH,SAAS,6BAA6B,GAAA;IACpC,OAAO,OAAO,MAAM,KAAK,WAAW;AAClC,QAAA,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU;AAChD;AAEA;;;;AAIG;AACH,SAAS,cAAc,CAAC,IAAY,EAAA;AAClC,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;;IAGlC,IAAI,6BAA6B,EAAE,EAAE;AACnC,QAAA,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7B,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7B,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;IAC5C;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;;;;AAIG;AACH,SAAS,sBAAsB,GAAA;AAC7B,IAAA,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC;;AAGhC,IAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;AACpC,IAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;;AAGpC,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK;AACzB,SAAA,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;SACxC,IAAI,CAAC,EAAE,CAAC;;IAGX,OAAO;AACL,QAAA,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACf,QAAA,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAChB,QAAA,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB,QAAA,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB,QAAA,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE;AACjB,KAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AACb;AAEA;;;AAGG;AACH,eAAe,aAAa,GAAA;AAC1B,IAAA,IAAI,CAAC,SAAS,EAAE,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;IAC1C;AAEA,IAAA,IAAI;;QAEF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,WAAW,CAAC;AACxD,QAAA,OAAO,SAAS;IAClB;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAA,CAAE,CAAC;IAC9C;AACF;AAEA;;;AAGG;AACH,eAAe,cAAc,GAAA;IAC3B,IAAI,SAAS,EAAE,EAAE;AACf,QAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;IACvD;AAEA,IAAA,IAAI;;AAEF,QAAA,MAAM,MAAM,GAAG,MAAM,OAAO,QAAQ,CAAC;AACrC,QAAA,OAAO,MAAM;IACf;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAA,CAAE,CAAC;IACrD;AACF;AAEA;;;;;AAKG;AACH,eAAe,cAAc,CAAC,IAAY,EAAE,SAAiB,EAAA;AAC3D,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC;AACzD,QAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACrC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC;AACzC,QAAA,OAAO,KAAK;IACd;AACF;AAEA;;;;;AAKG;AACH,eAAe,cAAc,CAAC,aAAqB,EAAE,UAAkB,EAAA;AACrE,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC;AAC3D,QAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IACnC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC;AACzC,QAAA,OAAO,KAAK;IACd;AACF;AAEA;;;;AAIG;AACH,eAAe,sBAAsB,CAAC,OAAe,EAAA;AACnD,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE;QACrC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE;AAClE,YAAA,aAAa,EAAE,OAAO;AACtB,YAAA,iBAAiB,EAAE;AACjB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,MAAM,EAAE;AACT,aAAA;AACD,YAAA,kBAAkB,EAAE;AAClB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,MAAM,EAAE;AACT;AACF,SAAA,CAAC;AACF,QAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE;IAClC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,QAAA,OAAO,IAAI;IACb;AACF;AAEA;;;;;AAKG;AACH,eAAe,iBAAiB,CAAC,IAAY,EAAE,SAAiB,EAAA;AAC9D,IAAA,IAAI;AACF,QAAA,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,SAAS,EAAE;AAC/B,QAAA,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC;AAC/B,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;AACrC,QAAA,OAAO,KAAK;IACd;AACF;AAEA;;;;;AAKG;AACH,eAAe,iBAAiB,CAAC,aAAqB,EAAE,UAAkB,EAAA;AACxE,IAAA,IAAI;AACF,QAAA,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,SAAS,EAAE;AAC/B,QAAA,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC;AACjC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;IACvC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;AACrC,QAAA,OAAO,KAAK;IACd;AACF;AAEA;;;;AAIG;AACH,eAAe,yBAAyB,CAAC,OAAe,EAAA;AACtD,IAAA,IAAI;AACF,QAAA,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QACvE,OAAO;AACL,YAAA,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE;AACjC,YAAA,UAAU,EAAE,OAAO,CAAC,aAAa;SAClC;IACH;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACxC,QAAA,OAAO,IAAI;IACb;AACF;AAEA;;;AAGG;AACH,MAAM,WAAW,GAAG;AAClB;;;;;;;;AAQG;AACH,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI;;YAEF,IAAI,6BAA6B,EAAE,EAAE;gBACnC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE;gBACvC,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC;;AAEA,YAAA,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC;YAC1D,OAAO,sBAAsB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD;QAAE,OAAO,KAAK,EAAE;;AAEd,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC;YAClD,OAAO,sBAAsB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD;IACF,CAAC;AAED;;;;;;;;;;;;;;;AAeG;IACH,GAAG,CAAC,KAAa,EAAE,IAAa,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK;QACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACtC,CAAC;AAED;;;;;;;;AAQG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,CAAC;AAED;;;;;;;;;AASG;IACH,MAAM,WAAW,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI;YACF,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,EAAE;AACnD,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC;QAC3B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,CAAA,CAAE,CAAC;;YAEnC,MAAM,SAAS,GAAG,wEAAwE;AAC1F,YAAA,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B;IACF,CAAC;AAED;;;;;;;;;;;;;;;AAeG;AACH,IAAA,MAAM,UAAU,CAAC,IAAY,EAAE,SAAiB,EAAA;QAC9C,IAAI,SAAS,EAAE,EAAE;AACf,YAAA,OAAO,MAAM,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;QACjD;AACA,QAAA,OAAO,MAAM,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;IAC9C,CAAC;AAED;;;;;;;;;;;;;;;AAeG;AACH,IAAA,MAAM,UAAU,CAAC,aAAqB,EAAE,UAAkB,EAAA;QACxD,IAAI,SAAS,EAAE,EAAE;AACf,YAAA,OAAO,MAAM,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC;QAC3D;AACA,QAAA,OAAO,MAAM,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC;IACxD,CAAC;AAED;;;;;;;;;;;;;AAaG;AACH,IAAA,MAAM,kBAAkB,CAAC,OAAA,GAAkB,IAAI,EAAA;QAC7C,IAAI,SAAS,EAAE,EAAE;AACf,YAAA,OAAO,MAAM,yBAAyB,CAAC,OAAO,CAAC;QACjD;AACA,QAAA,OAAO,MAAM,sBAAsB,CAAC,OAAO,CAAC;IAC9C,CAAC;AAED;;;;;;;;;;AAUG;IACH,UAAU,CAAC,IAAY,EAAE,GAAW,EAAA;AAClC,QAAA,IAAI;;AAEF,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;AAC5D,YAAA,OAAO,SAAS;QAClB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;QAC7B;IACF,CAAC;AAED;;;;;;;;;;AAUG;IACH,UAAU,CAAC,aAAqB,EAAE,GAAW,EAAA;AAC3C,QAAA,IAAI;;AAEF,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;AAC1D,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAE3D,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;YACtC;AAEA,YAAA,OAAO,aAAa;QACtB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;QAC7B;IACF;;;;;"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 加密工具类
|
|
3
|
+
* 提供 UUID 生成、MD5 哈希、RSA 加密解密、AES 对称加密等功能
|
|
4
|
+
*/
|
|
5
|
+
declare const cryptoUtils: {
|
|
6
|
+
/**
|
|
7
|
+
* 生成 UUID v4
|
|
8
|
+
* @returns {Promise<string>} 返回一个随机生成的 UUID v4 字符串
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const uuid = await cryptoUtils.uuid();
|
|
12
|
+
* console.log(uuid); // "550e8400e29b41d4a716446655440000"
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
uuid(): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* 生成字符串的 MD5 哈希值
|
|
18
|
+
* @param {string} input - 需要进行 MD5 加密的输入字符串
|
|
19
|
+
* @param {string} [salt] - 可选的盐值,用于增强安全性
|
|
20
|
+
* @returns {string} 返回 MD5 哈希值的十六进制字符串
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // 基础 MD5
|
|
24
|
+
* const hash1 = cryptoUtils.md5('hello world');
|
|
25
|
+
* console.log(hash1); // "5d41402abc4b2a76b9719d911017c592"
|
|
26
|
+
*
|
|
27
|
+
* // 带盐值的 MD5
|
|
28
|
+
* const hash2 = cryptoUtils.md5('password', 'mysalt');
|
|
29
|
+
* console.log(hash2); // "a1b2c3d4e5f6..."
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
md5(input: string, salt?: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* 生成简短的 UUID(8位)
|
|
35
|
+
* @returns {string} 返回一个8位的短 UUID 字符串
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const shortUuid = cryptoUtils.miniUuid();
|
|
39
|
+
* console.log(shortUuid); // "a1b2c3d4"
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
miniUuid(): string;
|
|
43
|
+
/**
|
|
44
|
+
* 验证 UUID 格式是否正确
|
|
45
|
+
* @param {string} uuid - 需要验证的 UUID 字符串
|
|
46
|
+
* @returns {Promise<boolean>} 如果格式正确返回 true,否则返回 false
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const isValid = await cryptoUtils.isValidUUID('550e8400-e29b-41d4-a716-446655440000');
|
|
50
|
+
* console.log(isValid); // true
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
isValidUUID(uuid: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* RSA 加密(跨环境兼容)
|
|
56
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
57
|
+
* @param {string} text - 需要加密的文本
|
|
58
|
+
* @param {string} publicKey - RSA 公钥(PEM 格式)
|
|
59
|
+
* @returns {Promise<string | false>} 返回加密后的 Base64 字符串,失败返回 false
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const publicKey = `-----BEGIN PUBLIC KEY-----
|
|
63
|
+
* MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o...
|
|
64
|
+
* -----END PUBLIC KEY-----`;
|
|
65
|
+
*
|
|
66
|
+
* const encrypted = await cryptoUtils.rsaEncrypt('Hello World', publicKey);
|
|
67
|
+
* console.log(encrypted); // "base64 encrypted string"
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
rsaEncrypt(text: string, publicKey: string): Promise<string | false>;
|
|
71
|
+
/**
|
|
72
|
+
* RSA 解密(跨环境兼容)
|
|
73
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
74
|
+
* @param {string} encryptedText - 需要解密的 Base64 字符串
|
|
75
|
+
* @param {string} privateKey - RSA 私钥(PEM 格式)
|
|
76
|
+
* @returns {Promise<string | false>} 返回解密后的原文,失败返回 false
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const privateKey = `-----BEGIN PRIVATE KEY-----
|
|
80
|
+
* MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL...
|
|
81
|
+
* -----END PRIVATE KEY-----`;
|
|
82
|
+
*
|
|
83
|
+
* const decrypted = await cryptoUtils.rsaDecrypt(encryptedText, privateKey);
|
|
84
|
+
* console.log(decrypted); // "Hello World"
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
rsaDecrypt(encryptedText: string, privateKey: string): Promise<string | false>;
|
|
88
|
+
/**
|
|
89
|
+
* 生成 RSA 密钥对(跨环境兼容)
|
|
90
|
+
* 在 Node.js 环境中使用内置 crypto 模块,在浏览器环境中使用 jsencrypt
|
|
91
|
+
* @param {number} [keySize=1024] - 密钥长度,默认 1024 位
|
|
92
|
+
* @returns {Promise<{ publicKey: string; privateKey: string } | null>} 返回包含公钥和私钥的对象,失败返回 null
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const keyPair = await cryptoUtils.generateRSAKeyPair(2048);
|
|
96
|
+
* if (keyPair) {
|
|
97
|
+
* console.log(keyPair.publicKey); // "-----BEGIN PUBLIC KEY-----..."
|
|
98
|
+
* console.log(keyPair.privateKey); // "-----BEGIN PRIVATE KEY-----..."
|
|
99
|
+
* }
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
generateRSAKeyPair(keySize?: number): Promise<{
|
|
103
|
+
publicKey: string;
|
|
104
|
+
privateKey: string;
|
|
105
|
+
} | null>;
|
|
106
|
+
/**
|
|
107
|
+
* AES 加密(使用字符串密钥)
|
|
108
|
+
* @param {string} text - 需要加密的文本
|
|
109
|
+
* @param {string} key - 加密密钥(字符串)
|
|
110
|
+
* @returns {string} 返回加密后的文本(包含 IV 和密文)
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const encrypted = cryptoUtils.aesEncrypt('Hello World', 'mySecretKey123');
|
|
114
|
+
* console.log(encrypted); // "iv:ciphertext"
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
aesEncrypt(text: string, key: string): string;
|
|
118
|
+
/**
|
|
119
|
+
* AES 解密(使用字符串密钥)
|
|
120
|
+
* @param {string} encryptedText - 需要解密的文本(包含 IV 和密文)
|
|
121
|
+
* @param {string} key - 解密密钥(字符串)
|
|
122
|
+
* @returns {string} 返回解密后的原文
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* const decrypted = cryptoUtils.aesDecrypt(encryptedText, 'mySecretKey123');
|
|
126
|
+
* console.log(decrypted); // "Hello World"
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
aesDecrypt(encryptedText: string, key: string): string;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
export { cryptoUtils as default };
|