@tiny-codes/react-easy 1.4.10 → 1.4.11
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/CHANGELOG.md +10 -0
- package/es/utils/crypto.d.ts +2 -0
- package/es/utils/crypto.js +130 -25
- package/es/utils/crypto.js.map +1 -1
- package/lib/utils/crypto.d.ts +2 -0
- package/lib/utils/crypto.js +124 -25
- package/lib/utils/crypto.js.map +2 -2
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
package/es/utils/crypto.d.ts
CHANGED
|
@@ -24,3 +24,5 @@ export declare function encryptAES(text: string, key: string): Promise<string>;
|
|
|
24
24
|
* @returns The decrypted text
|
|
25
25
|
*/
|
|
26
26
|
export declare function decryptAES(encryptedText: string, key: string): Promise<string>;
|
|
27
|
+
export declare function encryptWithCryptoJS(text: string, key: string): Promise<string>;
|
|
28
|
+
export declare function decryptWithCryptoJS(encryptedText: string, key: string): Promise<string>;
|
package/es/utils/crypto.js
CHANGED
|
@@ -119,41 +119,50 @@ function _encryptAES() {
|
|
|
119
119
|
encrypted += cipher.final('base64');
|
|
120
120
|
return _context3.abrupt("return", "".concat(iv.toString('base64'), ":").concat(encrypted));
|
|
121
121
|
case 11:
|
|
122
|
-
|
|
122
|
+
if (!crypto.subtle) {
|
|
123
|
+
_context3.next = 37;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
_context3.prev = 12;
|
|
123
127
|
_iv = crypto.getRandomValues(new Uint8Array(16));
|
|
124
128
|
encoder = new TextEncoder();
|
|
125
129
|
keyData = encoder.encode(key);
|
|
126
|
-
_context3.next =
|
|
130
|
+
_context3.next = 18;
|
|
127
131
|
return crypto.subtle.digest('SHA-256', keyData);
|
|
128
|
-
case
|
|
132
|
+
case 18:
|
|
129
133
|
hashBuffer = _context3.sent;
|
|
130
|
-
_context3.next =
|
|
134
|
+
_context3.next = 21;
|
|
131
135
|
return crypto.subtle.importKey('raw', hashBuffer, {
|
|
132
136
|
name: 'AES-CBC'
|
|
133
137
|
}, false, ['encrypt']);
|
|
134
|
-
case
|
|
138
|
+
case 21:
|
|
135
139
|
cryptoKey = _context3.sent;
|
|
136
140
|
textBytes = encoder.encode(text);
|
|
137
|
-
_context3.next =
|
|
141
|
+
_context3.next = 25;
|
|
138
142
|
return crypto.subtle.encrypt({
|
|
139
143
|
name: 'AES-CBC',
|
|
140
144
|
iv: _iv
|
|
141
145
|
}, cryptoKey, textBytes);
|
|
142
|
-
case
|
|
146
|
+
case 25:
|
|
143
147
|
encryptedBuffer = _context3.sent;
|
|
144
148
|
ivBase64 = btoa(String.fromCharCode.apply(String, _toConsumableArray(_iv)));
|
|
145
149
|
encryptedBase64 = btoa(String.fromCharCode.apply(String, _toConsumableArray(new Uint8Array(encryptedBuffer))));
|
|
146
150
|
return _context3.abrupt("return", "".concat(ivBase64, ":").concat(encryptedBase64));
|
|
147
|
-
case
|
|
148
|
-
_context3.prev =
|
|
149
|
-
_context3.t0 = _context3["catch"](
|
|
151
|
+
case 31:
|
|
152
|
+
_context3.prev = 31;
|
|
153
|
+
_context3.t0 = _context3["catch"](12);
|
|
150
154
|
console.error('Encryption error:', _context3.t0);
|
|
151
155
|
throw _context3.t0;
|
|
152
|
-
case
|
|
156
|
+
case 35:
|
|
157
|
+
_context3.next = 38;
|
|
158
|
+
break;
|
|
159
|
+
case 37:
|
|
160
|
+
return _context3.abrupt("return", encryptWithCryptoJS(text, key));
|
|
161
|
+
case 38:
|
|
153
162
|
case "end":
|
|
154
163
|
return _context3.stop();
|
|
155
164
|
}
|
|
156
|
-
}, _callee3, null, [[
|
|
165
|
+
}, _callee3, null, [[12, 31]]);
|
|
157
166
|
}));
|
|
158
167
|
return _encryptAES.apply(this, arguments);
|
|
159
168
|
}
|
|
@@ -190,7 +199,11 @@ function _decryptAES() {
|
|
|
190
199
|
decrypted = Buffer.concat([decrypted, decipher.final()]);
|
|
191
200
|
return _context4.abrupt("return", decrypted.toString('utf8'));
|
|
192
201
|
case 16:
|
|
193
|
-
|
|
202
|
+
if (!crypto.subtle) {
|
|
203
|
+
_context4.next = 34;
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
// Browsers with Web Crypto API, in secure contexts (HTTPS)
|
|
194
207
|
_iv2 = Uint8Array.from(atob(ivBase64), function (c) {
|
|
195
208
|
return c.charCodeAt(0);
|
|
196
209
|
});
|
|
@@ -199,39 +212,131 @@ function _decryptAES() {
|
|
|
199
212
|
});
|
|
200
213
|
encoder = new TextEncoder();
|
|
201
214
|
keyData = encoder.encode(key);
|
|
202
|
-
_context4.next =
|
|
215
|
+
_context4.next = 23;
|
|
203
216
|
return crypto.subtle.digest('SHA-256', keyData);
|
|
204
|
-
case
|
|
217
|
+
case 23:
|
|
205
218
|
hashBuffer = _context4.sent;
|
|
206
|
-
_context4.next =
|
|
219
|
+
_context4.next = 26;
|
|
207
220
|
return crypto.subtle.importKey('raw', hashBuffer, {
|
|
208
221
|
name: 'AES-CBC'
|
|
209
222
|
}, false, ['decrypt']);
|
|
210
|
-
case
|
|
223
|
+
case 26:
|
|
211
224
|
cryptoKey = _context4.sent;
|
|
212
|
-
_context4.next =
|
|
225
|
+
_context4.next = 29;
|
|
213
226
|
return crypto.subtle.decrypt({
|
|
214
227
|
name: 'AES-CBC',
|
|
215
228
|
iv: _iv2
|
|
216
229
|
}, cryptoKey, encryptedData);
|
|
217
|
-
case
|
|
230
|
+
case 29:
|
|
218
231
|
decryptedBuffer = _context4.sent;
|
|
219
232
|
decoder = new TextDecoder();
|
|
220
233
|
return _context4.abrupt("return", decoder.decode(decryptedBuffer));
|
|
221
|
-
case
|
|
222
|
-
_context4.
|
|
234
|
+
case 34:
|
|
235
|
+
return _context4.abrupt("return", decryptWithCryptoJS(encryptedText, key));
|
|
236
|
+
case 35:
|
|
237
|
+
_context4.next = 41;
|
|
223
238
|
break;
|
|
224
|
-
case
|
|
225
|
-
_context4.prev =
|
|
239
|
+
case 37:
|
|
240
|
+
_context4.prev = 37;
|
|
226
241
|
_context4.t0 = _context4["catch"](1);
|
|
227
242
|
console.error('Decryption error:', _context4.t0);
|
|
228
243
|
return _context4.abrupt("return", '');
|
|
229
|
-
case
|
|
244
|
+
case 41:
|
|
230
245
|
case "end":
|
|
231
246
|
return _context4.stop();
|
|
232
247
|
}
|
|
233
|
-
}, _callee4, null, [[1,
|
|
248
|
+
}, _callee4, null, [[1, 37]]);
|
|
234
249
|
}));
|
|
235
250
|
return _decryptAES.apply(this, arguments);
|
|
236
251
|
}
|
|
252
|
+
export function encryptWithCryptoJS(_x9, _x10) {
|
|
253
|
+
return _encryptWithCryptoJS.apply(this, arguments);
|
|
254
|
+
}
|
|
255
|
+
function _encryptWithCryptoJS() {
|
|
256
|
+
_encryptWithCryptoJS = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(text, key) {
|
|
257
|
+
var _yield$Promise$all, _yield$Promise$all2, _yield$Promise$all2$, CBC, WordArray, Pkcs7, Base64, Utf8, SHA256, encrypt, wordArray, keyArray, iv, encryptedBase64;
|
|
258
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
259
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
260
|
+
case 0:
|
|
261
|
+
_context5.next = 2;
|
|
262
|
+
return Promise.all([import('crypto-js/core.js'), import('crypto-js/pad-pkcs7.js'), import('crypto-js/enc-base64.js'), import('crypto-js/enc-utf8.js'), import('crypto-js/sha256.js'), import('crypto-js/aes.js')]);
|
|
263
|
+
case 2:
|
|
264
|
+
_yield$Promise$all = _context5.sent;
|
|
265
|
+
_yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 6);
|
|
266
|
+
_yield$Promise$all2$ = _yield$Promise$all2[0].default;
|
|
267
|
+
CBC = _yield$Promise$all2$.mode.CBC;
|
|
268
|
+
WordArray = _yield$Promise$all2$.lib.WordArray;
|
|
269
|
+
Pkcs7 = _yield$Promise$all2[1].default;
|
|
270
|
+
Base64 = _yield$Promise$all2[2].default;
|
|
271
|
+
Utf8 = _yield$Promise$all2[3].default;
|
|
272
|
+
SHA256 = _yield$Promise$all2[4].default;
|
|
273
|
+
encrypt = _yield$Promise$all2[5].default.encrypt;
|
|
274
|
+
_context5.prev = 12;
|
|
275
|
+
// Convert text and key to WordArray objects
|
|
276
|
+
wordArray = Utf8.parse(text);
|
|
277
|
+
keyArray = SHA256(key);
|
|
278
|
+
iv = WordArray.random(16);
|
|
279
|
+
encryptedBase64 = Base64.stringify(encrypt(wordArray, keyArray, {
|
|
280
|
+
iv: iv,
|
|
281
|
+
mode: CBC,
|
|
282
|
+
padding: Pkcs7
|
|
283
|
+
}).ciphertext);
|
|
284
|
+
return _context5.abrupt("return", "".concat(Base64.stringify(iv), ":").concat(encryptedBase64));
|
|
285
|
+
case 20:
|
|
286
|
+
_context5.prev = 20;
|
|
287
|
+
_context5.t0 = _context5["catch"](12);
|
|
288
|
+
console.error('Encryption error:', _context5.t0);
|
|
289
|
+
throw _context5.t0;
|
|
290
|
+
case 24:
|
|
291
|
+
case "end":
|
|
292
|
+
return _context5.stop();
|
|
293
|
+
}
|
|
294
|
+
}, _callee5, null, [[12, 20]]);
|
|
295
|
+
}));
|
|
296
|
+
return _encryptWithCryptoJS.apply(this, arguments);
|
|
297
|
+
}
|
|
298
|
+
export function decryptWithCryptoJS(_x11, _x12) {
|
|
299
|
+
return _decryptWithCryptoJS.apply(this, arguments);
|
|
300
|
+
}
|
|
301
|
+
function _decryptWithCryptoJS() {
|
|
302
|
+
_decryptWithCryptoJS = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(encryptedText, key) {
|
|
303
|
+
var _encryptedText$split3, _encryptedText$split4, ivBase64, encryptedBase64, _yield$Promise$all3, _yield$Promise$all4, CBC, Pkcs7, Base64, Utf8, SHA256, decrypt, iv, derivedKey, decrypted;
|
|
304
|
+
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
305
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
306
|
+
case 0:
|
|
307
|
+
_encryptedText$split3 = encryptedText.split(':'), _encryptedText$split4 = _slicedToArray(_encryptedText$split3, 2), ivBase64 = _encryptedText$split4[0], encryptedBase64 = _encryptedText$split4[1];
|
|
308
|
+
_context6.next = 3;
|
|
309
|
+
return Promise.all([import('crypto-js/core.js'), import('crypto-js/pad-pkcs7.js'), import('crypto-js/enc-base64.js'), import('crypto-js/enc-utf8.js'), import('crypto-js/sha256.js'), import('crypto-js/aes.js')]);
|
|
310
|
+
case 3:
|
|
311
|
+
_yield$Promise$all3 = _context6.sent;
|
|
312
|
+
_yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 6);
|
|
313
|
+
CBC = _yield$Promise$all4[0].default.mode.CBC;
|
|
314
|
+
Pkcs7 = _yield$Promise$all4[1].default;
|
|
315
|
+
Base64 = _yield$Promise$all4[2].default;
|
|
316
|
+
Utf8 = _yield$Promise$all4[3].default;
|
|
317
|
+
SHA256 = _yield$Promise$all4[4].default;
|
|
318
|
+
decrypt = _yield$Promise$all4[5].default.decrypt;
|
|
319
|
+
_context6.prev = 11;
|
|
320
|
+
// Convert base64 strings to WordArray objects
|
|
321
|
+
iv = Base64.parse(ivBase64); // Derive key using SHA-256 (matching native implementation)
|
|
322
|
+
derivedKey = SHA256(key);
|
|
323
|
+
decrypted = decrypt(encryptedBase64, derivedKey, {
|
|
324
|
+
iv: iv,
|
|
325
|
+
mode: CBC,
|
|
326
|
+
padding: Pkcs7
|
|
327
|
+
});
|
|
328
|
+
return _context6.abrupt("return", decrypted.toString(Utf8));
|
|
329
|
+
case 18:
|
|
330
|
+
_context6.prev = 18;
|
|
331
|
+
_context6.t0 = _context6["catch"](11);
|
|
332
|
+
console.error('Decryption error:', _context6.t0);
|
|
333
|
+
throw _context6.t0;
|
|
334
|
+
case 22:
|
|
335
|
+
case "end":
|
|
336
|
+
return _context6.stop();
|
|
337
|
+
}
|
|
338
|
+
}, _callee6, null, [[11, 18]]);
|
|
339
|
+
}));
|
|
340
|
+
return _decryptWithCryptoJS.apply(this, arguments);
|
|
341
|
+
}
|
|
237
342
|
//# sourceMappingURL=crypto.js.map
|
package/es/utils/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","base64ToString","stringToBase64","random","randomChars","advancedEncrypt","_x","_x2","_advancedEncrypt","_callee","plainText","k1","b","_callee$","_context","encryptAES","substring","concat","advancedDecrypt","_x3","_x4","_advancedDecrypt","_callee2","encryptedText","decrypted","_decrypted$split","_decrypted$split2","_base64ToString$split","_base64ToString$split2","_callee2$","_context2","decryptAES","split","_slicedToArray","map","Number","_x5","_x6","_encryptAES","_callee3","text","isNode","_crypto","derivedKey","iv","cipher","encrypted","_iv","encoder","keyData","hashBuffer","cryptoKey","textBytes","encryptedBuffer","ivBase64","encryptedBase64","_callee3$","_context3","process","versions","node","crypto","require","createHash","update","digest","randomBytes","createCipheriv","final","toString","getRandomValues","Uint8Array","TextEncoder","encode","subtle","importKey","encrypt","btoa","String","fromCharCode","_toConsumableArray","t0","console","_x7","_x8","_decryptAES","_callee4","_encryptedText$split","_encryptedText$split2","_crypto2","decipher","_iv2","encryptedData","decryptedBuffer","decoder","_callee4$","_context4","Buffer","from","createDecipheriv","atob","charCodeAt","decrypt","TextDecoder","decode"],"sources":["../../src/utils/crypto.ts"],"sourcesContent":["import { base64ToString, stringToBase64 } from './base64';\nimport { random } from './math';\nimport { randomChars } from './string';\n\n/** Secret. No description provided */\nexport async function advancedEncrypt(plainText: string, key: string) {\n const k1 = randomChars(36);\n let e = await encryptAES(plainText, k1);\n const b = stringToBase64(k1);\n const l = b.length;\n const s = random(0, e.length);\n e = e.substring(0, s) + b + e.substring(s);\n const r = stringToBase64(`${s}-${l}`);\n const t = `${e}.${r}`;\n return encryptAES(t, key);\n}\n\n/** Secret. No description provided */\nexport async function advancedDecrypt(encryptedText: string, key: string) {\n const decrypted = await decryptAES(encryptedText, key);\n const [e, r] = decrypted.split('.');\n const [s, l] = base64ToString(r).split('-').map(Number);\n const k1 = base64ToString(e.substring(s, s + l));\n return decryptAES(e.substring(0, s) + e.substring(s + l), k1);\n}\n\n/**\n * **EN**: General AES encryption function - supports both Node.js and browser environments\n *\n * **CN**: 通用 AES 加密函数 - 同时支持 Node.js 和浏览器环境\n *\n * @param {string} text The text to be encrypted | 要加密的文本\n * @param {string} key The encryption key | 加密密钥\n *\n * @returns {Promise<string>} The encrypted text | 加密后的文本\n */\nexport async function encryptAES(text: string, key: string): Promise<string> {\n const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n if (isNode) {\n // Node.js\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const crypto = require('crypto');\n const derivedKey = crypto.createHash('sha256').update(key).digest();\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv('aes-256-cbc', derivedKey, iv);\n let encrypted = cipher.update(text, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n return `${iv.toString('base64')}:${encrypted}`;\n } else {\n // Browsers\n try {\n const iv = crypto.getRandomValues(new Uint8Array(16));\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const hashBuffer = await crypto.subtle.digest('SHA-256', keyData);\n const cryptoKey = await crypto.subtle.importKey('raw', hashBuffer, { name: 'AES-CBC' }, false, ['encrypt']);\n const textBytes = encoder.encode(text);\n const encryptedBuffer = await crypto.subtle.encrypt({ name: 'AES-CBC', iv }, cryptoKey, textBytes);\n const ivBase64 = btoa(String.fromCharCode(...iv));\n const encryptedBase64 = btoa(String.fromCharCode(...new Uint8Array(encryptedBuffer)));\n return `${ivBase64}:${encryptedBase64}`;\n } catch (error) {\n console.error('Encryption error:', error);\n throw error;\n }\n }\n}\n\n/**\n * **EN**: General AES decryption function - supports both Node.js and browser environments\n *\n * **CN**: 通用 AES 解密函数 - 同时支持 Node.js 和浏览器环境\n *\n * @param encryptedText The encrypted text (format: iv:encryptedContent, base64 encoded)\n * @param key The decryption key\n *\n * @returns The decrypted text\n */\nexport async function decryptAES(encryptedText: string, key: string): Promise<string> {\n const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n try {\n const [ivBase64, encryptedBase64] = encryptedText.split(':');\n if (!ivBase64 || !encryptedBase64) {\n throw new Error('Invalid encrypted format');\n }\n if (isNode) {\n // Node.js\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const crypto = require('crypto');\n const iv = Buffer.from(ivBase64, 'base64');\n const encryptedBuffer = Buffer.from(encryptedBase64, 'base64');\n const derivedKey = crypto.createHash('sha256').update(key).digest();\n const decipher = crypto.createDecipheriv('aes-256-cbc', derivedKey, iv);\n let decrypted = decipher.update(encryptedBuffer);\n decrypted = Buffer.concat([decrypted, decipher.final()]);\n return decrypted.toString('utf8');\n } else {\n // Browsers\n const iv = Uint8Array.from(atob(ivBase64), (c) => c.charCodeAt(0));\n const encryptedData = Uint8Array.from(atob(encryptedBase64), (c) => c.charCodeAt(0));\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const hashBuffer = await crypto.subtle.digest('SHA-256', keyData);\n const cryptoKey = await crypto.subtle.importKey('raw', hashBuffer, { name: 'AES-CBC' }, false, ['decrypt']);\n const decryptedBuffer = await crypto.subtle.decrypt({ name: 'AES-CBC', iv }, cryptoKey, encryptedData);\n const decoder = new TextDecoder();\n return decoder.decode(decryptedBuffer);\n }\n } catch (error) {\n console.error('Decryption error:', error);\n return '';\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","base64ToString","stringToBase64","random","randomChars","advancedEncrypt","_x","_x2","_advancedEncrypt","_callee","plainText","k1","b","_callee$","_context","encryptAES","substring","concat","advancedDecrypt","_x3","_x4","_advancedDecrypt","_callee2","encryptedText","decrypted","_decrypted$split","_decrypted$split2","_base64ToString$split","_base64ToString$split2","_callee2$","_context2","decryptAES","split","_slicedToArray","map","Number","_x5","_x6","_encryptAES","_callee3","text","isNode","_crypto","derivedKey","iv","cipher","encrypted","_iv","encoder","keyData","hashBuffer","cryptoKey","textBytes","encryptedBuffer","ivBase64","encryptedBase64","_callee3$","_context3","process","versions","node","crypto","require","createHash","update","digest","randomBytes","createCipheriv","final","toString","subtle","getRandomValues","Uint8Array","TextEncoder","encode","importKey","encrypt","btoa","String","fromCharCode","_toConsumableArray","t0","console","encryptWithCryptoJS","_x7","_x8","_decryptAES","_callee4","_encryptedText$split","_encryptedText$split2","_crypto2","decipher","_iv2","encryptedData","decryptedBuffer","decoder","_callee4$","_context4","Buffer","from","createDecipheriv","atob","charCodeAt","decrypt","TextDecoder","decode","decryptWithCryptoJS","_x9","_x10","_encryptWithCryptoJS","_callee5","_yield$Promise$all","_yield$Promise$all2","_yield$Promise$all2$","CBC","WordArray","Pkcs7","Base64","Utf8","SHA256","wordArray","keyArray","_callee5$","_context5","all","default","mode","lib","parse","stringify","padding","ciphertext","_x11","_x12","_decryptWithCryptoJS","_callee6","_encryptedText$split3","_encryptedText$split4","_yield$Promise$all3","_yield$Promise$all4","_callee6$","_context6"],"sources":["../../src/utils/crypto.ts"],"sourcesContent":["import { base64ToString, stringToBase64 } from './base64';\nimport { random } from './math';\nimport { randomChars } from './string';\n\n/** Secret. No description provided */\nexport async function advancedEncrypt(plainText: string, key: string) {\n const k1 = randomChars(36);\n let e = await encryptAES(plainText, k1);\n const b = stringToBase64(k1);\n const l = b.length;\n const s = random(0, e.length);\n e = e.substring(0, s) + b + e.substring(s);\n const r = stringToBase64(`${s}-${l}`);\n const t = `${e}.${r}`;\n return encryptAES(t, key);\n}\n\n/** Secret. No description provided */\nexport async function advancedDecrypt(encryptedText: string, key: string) {\n const decrypted = await decryptAES(encryptedText, key);\n const [e, r] = decrypted.split('.');\n const [s, l] = base64ToString(r).split('-').map(Number);\n const k1 = base64ToString(e.substring(s, s + l));\n return decryptAES(e.substring(0, s) + e.substring(s + l), k1);\n}\n\n/**\n * **EN**: General AES encryption function - supports both Node.js and browser environments\n *\n * **CN**: 通用 AES 加密函数 - 同时支持 Node.js 和浏览器环境\n *\n * @param {string} text The text to be encrypted | 要加密的文本\n * @param {string} key The encryption key | 加密密钥\n *\n * @returns {Promise<string>} The encrypted text | 加密后的文本\n */\nexport async function encryptAES(text: string, key: string): Promise<string> {\n const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n if (isNode) {\n // Node.js\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const crypto = require('crypto');\n const derivedKey = crypto.createHash('sha256').update(key).digest();\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv('aes-256-cbc', derivedKey, iv);\n let encrypted = cipher.update(text, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n return `${iv.toString('base64')}:${encrypted}`;\n } else {\n if (crypto.subtle) {\n // Browsers\n try {\n const iv = crypto.getRandomValues(new Uint8Array(16));\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const hashBuffer = await crypto.subtle.digest('SHA-256', keyData);\n const cryptoKey = await crypto.subtle.importKey('raw', hashBuffer, { name: 'AES-CBC' }, false, ['encrypt']);\n const textBytes = encoder.encode(text);\n const encryptedBuffer = await crypto.subtle.encrypt({ name: 'AES-CBC', iv }, cryptoKey, textBytes);\n const ivBase64 = btoa(String.fromCharCode(...iv));\n const encryptedBase64 = btoa(String.fromCharCode(...new Uint8Array(encryptedBuffer)));\n return `${ivBase64}:${encryptedBase64}`;\n } catch (error) {\n console.error('Encryption error:', error);\n throw error;\n }\n } else {\n // let encrypt: typeof CryptoJS.AES.encrypt;\n // try {\n // const aes = await import('crypto-js/aes');\n // encrypt = aes.encrypt;\n // } catch (error) {\n // console.error('Load \"crypto-js/aes\" error:', error);\n // throw error;\n // }\n // try {\n // return encrypt(text, key).toString();\n // } catch (error) {\n // console.error('Encryption error:', error);\n // throw error;\n // }\n return encryptWithCryptoJS(text, key);\n }\n }\n}\n\n/**\n * **EN**: General AES decryption function - supports both Node.js and browser environments\n *\n * **CN**: 通用 AES 解密函数 - 同时支持 Node.js 和浏览器环境\n *\n * @param encryptedText The encrypted text (format: iv:encryptedContent, base64 encoded)\n * @param key The decryption key\n *\n * @returns The decrypted text\n */\nexport async function decryptAES(encryptedText: string, key: string): Promise<string> {\n const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n try {\n const [ivBase64, encryptedBase64] = encryptedText.split(':');\n if (!ivBase64 || !encryptedBase64) {\n throw new Error('Invalid encrypted format');\n }\n if (isNode) {\n // Node.js\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const crypto = require('crypto');\n const iv = Buffer.from(ivBase64, 'base64');\n const encryptedBuffer = Buffer.from(encryptedBase64, 'base64');\n const derivedKey = crypto.createHash('sha256').update(key).digest();\n const decipher = crypto.createDecipheriv('aes-256-cbc', derivedKey, iv);\n let decrypted = decipher.update(encryptedBuffer);\n decrypted = Buffer.concat([decrypted, decipher.final()]);\n return decrypted.toString('utf8');\n } else {\n if (crypto.subtle) {\n // Browsers with Web Crypto API, in secure contexts (HTTPS)\n const iv = Uint8Array.from(atob(ivBase64), (c) => c.charCodeAt(0));\n const encryptedData = Uint8Array.from(atob(encryptedBase64), (c) => c.charCodeAt(0));\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const hashBuffer = await crypto.subtle.digest('SHA-256', keyData);\n const cryptoKey = await crypto.subtle.importKey('raw', hashBuffer, { name: 'AES-CBC' }, false, ['decrypt']);\n const decryptedBuffer = await crypto.subtle.decrypt({ name: 'AES-CBC', iv }, cryptoKey, encryptedData);\n const decoder = new TextDecoder();\n return decoder.decode(decryptedBuffer);\n } else {\n // Browsers without Web Crypto API, or insecure contexts (HTTP), fallback to CryptoJS\n // let decrypt: typeof CryptoJS.AES.decrypt;\n // let utf8: typeof CryptoJS.enc.Utf8;\n // try {\n // const [aes, encUtf8] = await Promise.all([import('crypto-js/aes'), import('crypto-js/enc-utf8')]);\n // decrypt = aes.decrypt;\n // utf8 = encUtf8.default;\n // } catch (error) {\n // console.error('Load \"crypto-js/aes\" error:', error);\n // throw error;\n // }\n // try {\n // const decrypted = decrypt(encryptedText, key);\n // return decrypted.toString(utf8);\n // } catch (error) {\n // console.error('Decryption error:', error);\n // throw error;\n // }\n return decryptWithCryptoJS(encryptedText, key);\n }\n }\n } catch (error) {\n console.error('Decryption error:', error);\n return '';\n }\n}\nexport async function encryptWithCryptoJS(text: string, key: string) {\n const [\n {\n default: {\n mode: { CBC },\n lib: { WordArray },\n },\n },\n { default: Pkcs7 },\n { default: Base64 },\n { default: Utf8 },\n { default: SHA256 },\n {\n default: { encrypt },\n },\n ] = await Promise.all([\n import('crypto-js/core.js'),\n import('crypto-js/pad-pkcs7.js'),\n import('crypto-js/enc-base64.js'),\n import('crypto-js/enc-utf8.js'),\n import('crypto-js/sha256.js'),\n import('crypto-js/aes.js'),\n ]);\n\n try {\n // Convert text and key to WordArray objects\n const wordArray = Utf8.parse(text);\n const keyArray = SHA256(key);\n const iv = WordArray.random(16);\n\n const encryptedBase64 = Base64.stringify(\n encrypt(wordArray, keyArray, {\n iv,\n mode: CBC,\n padding: Pkcs7,\n }).ciphertext\n );\n return `${Base64.stringify(iv)}:${encryptedBase64}`;\n } catch (error) {\n console.error('Encryption error:', error);\n throw error;\n }\n}\n\nexport async function decryptWithCryptoJS(encryptedText: string, key: string) {\n const [ivBase64, encryptedBase64] = encryptedText.split(':');\n\n const [\n {\n default: {\n mode: { CBC },\n },\n },\n { default: Pkcs7 },\n { default: Base64 },\n { default: Utf8 },\n { default: SHA256 },\n {\n default: { decrypt },\n },\n ] = await Promise.all([\n import('crypto-js/core.js'),\n import('crypto-js/pad-pkcs7.js'),\n import('crypto-js/enc-base64.js'),\n import('crypto-js/enc-utf8.js'),\n import('crypto-js/sha256.js'),\n import('crypto-js/aes.js'),\n ]);\n\n try {\n // Convert base64 strings to WordArray objects\n const iv = Base64.parse(ivBase64);\n // Derive key using SHA-256 (matching native implementation)\n const derivedKey = SHA256(key);\n const decrypted = decrypt(encryptedBase64, derivedKey, {\n iv,\n mode: CBC,\n padding: Pkcs7,\n });\n return decrypted.toString(Utf8);\n } catch (error) {\n console.error('Decryption error:', error);\n throw error;\n }\n}\n"],"mappings":"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"}
|
package/lib/utils/crypto.d.ts
CHANGED
|
@@ -24,3 +24,5 @@ export declare function encryptAES(text: string, key: string): Promise<string>;
|
|
|
24
24
|
* @returns The decrypted text
|
|
25
25
|
*/
|
|
26
26
|
export declare function decryptAES(encryptedText: string, key: string): Promise<string>;
|
|
27
|
+
export declare function encryptWithCryptoJS(text: string, key: string): Promise<string>;
|
|
28
|
+
export declare function decryptWithCryptoJS(encryptedText: string, key: string): Promise<string>;
|
package/lib/utils/crypto.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
7
|
var __export = (target, all) => {
|
|
6
8
|
for (var name in all)
|
|
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
14
16
|
}
|
|
15
17
|
return to;
|
|
16
18
|
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
17
27
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
28
|
|
|
19
29
|
// src/utils/crypto.ts
|
|
@@ -22,7 +32,9 @@ __export(crypto_exports, {
|
|
|
22
32
|
advancedDecrypt: () => advancedDecrypt,
|
|
23
33
|
advancedEncrypt: () => advancedEncrypt,
|
|
24
34
|
decryptAES: () => decryptAES,
|
|
25
|
-
|
|
35
|
+
decryptWithCryptoJS: () => decryptWithCryptoJS,
|
|
36
|
+
encryptAES: () => encryptAES,
|
|
37
|
+
encryptWithCryptoJS: () => encryptWithCryptoJS
|
|
26
38
|
});
|
|
27
39
|
module.exports = __toCommonJS(crypto_exports);
|
|
28
40
|
var import_base64 = require("./base64");
|
|
@@ -57,20 +69,24 @@ async function encryptAES(text, key) {
|
|
|
57
69
|
encrypted += cipher.final("base64");
|
|
58
70
|
return `${iv.toString("base64")}:${encrypted}`;
|
|
59
71
|
} else {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
if (crypto.subtle) {
|
|
73
|
+
try {
|
|
74
|
+
const iv = crypto.getRandomValues(new Uint8Array(16));
|
|
75
|
+
const encoder = new TextEncoder();
|
|
76
|
+
const keyData = encoder.encode(key);
|
|
77
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", keyData);
|
|
78
|
+
const cryptoKey = await crypto.subtle.importKey("raw", hashBuffer, { name: "AES-CBC" }, false, ["encrypt"]);
|
|
79
|
+
const textBytes = encoder.encode(text);
|
|
80
|
+
const encryptedBuffer = await crypto.subtle.encrypt({ name: "AES-CBC", iv }, cryptoKey, textBytes);
|
|
81
|
+
const ivBase64 = btoa(String.fromCharCode(...iv));
|
|
82
|
+
const encryptedBase64 = btoa(String.fromCharCode(...new Uint8Array(encryptedBuffer)));
|
|
83
|
+
return `${ivBase64}:${encryptedBase64}`;
|
|
84
|
+
} catch (error) {
|
|
85
|
+
console.error("Encryption error:", error);
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
} else {
|
|
89
|
+
return encryptWithCryptoJS(text, key);
|
|
74
90
|
}
|
|
75
91
|
}
|
|
76
92
|
}
|
|
@@ -91,26 +107,109 @@ async function decryptAES(encryptedText, key) {
|
|
|
91
107
|
decrypted = Buffer.concat([decrypted, decipher.final()]);
|
|
92
108
|
return decrypted.toString("utf8");
|
|
93
109
|
} else {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
if (crypto.subtle) {
|
|
111
|
+
const iv = Uint8Array.from(atob(ivBase64), (c) => c.charCodeAt(0));
|
|
112
|
+
const encryptedData = Uint8Array.from(atob(encryptedBase64), (c) => c.charCodeAt(0));
|
|
113
|
+
const encoder = new TextEncoder();
|
|
114
|
+
const keyData = encoder.encode(key);
|
|
115
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", keyData);
|
|
116
|
+
const cryptoKey = await crypto.subtle.importKey("raw", hashBuffer, { name: "AES-CBC" }, false, ["decrypt"]);
|
|
117
|
+
const decryptedBuffer = await crypto.subtle.decrypt({ name: "AES-CBC", iv }, cryptoKey, encryptedData);
|
|
118
|
+
const decoder = new TextDecoder();
|
|
119
|
+
return decoder.decode(decryptedBuffer);
|
|
120
|
+
} else {
|
|
121
|
+
return decryptWithCryptoJS(encryptedText, key);
|
|
122
|
+
}
|
|
103
123
|
}
|
|
104
124
|
} catch (error) {
|
|
105
125
|
console.error("Decryption error:", error);
|
|
106
126
|
return "";
|
|
107
127
|
}
|
|
108
128
|
}
|
|
129
|
+
async function encryptWithCryptoJS(text, key) {
|
|
130
|
+
const [
|
|
131
|
+
{
|
|
132
|
+
default: {
|
|
133
|
+
mode: { CBC },
|
|
134
|
+
lib: { WordArray }
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
{ default: Pkcs7 },
|
|
138
|
+
{ default: Base64 },
|
|
139
|
+
{ default: Utf8 },
|
|
140
|
+
{ default: SHA256 },
|
|
141
|
+
{
|
|
142
|
+
default: { encrypt }
|
|
143
|
+
}
|
|
144
|
+
] = await Promise.all([
|
|
145
|
+
import("crypto-js/core.js"),
|
|
146
|
+
import("crypto-js/pad-pkcs7.js"),
|
|
147
|
+
import("crypto-js/enc-base64.js"),
|
|
148
|
+
import("crypto-js/enc-utf8.js"),
|
|
149
|
+
import("crypto-js/sha256.js"),
|
|
150
|
+
import("crypto-js/aes.js")
|
|
151
|
+
]);
|
|
152
|
+
try {
|
|
153
|
+
const wordArray = Utf8.parse(text);
|
|
154
|
+
const keyArray = SHA256(key);
|
|
155
|
+
const iv = WordArray.random(16);
|
|
156
|
+
const encryptedBase64 = Base64.stringify(
|
|
157
|
+
encrypt(wordArray, keyArray, {
|
|
158
|
+
iv,
|
|
159
|
+
mode: CBC,
|
|
160
|
+
padding: Pkcs7
|
|
161
|
+
}).ciphertext
|
|
162
|
+
);
|
|
163
|
+
return `${Base64.stringify(iv)}:${encryptedBase64}`;
|
|
164
|
+
} catch (error) {
|
|
165
|
+
console.error("Encryption error:", error);
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async function decryptWithCryptoJS(encryptedText, key) {
|
|
170
|
+
const [ivBase64, encryptedBase64] = encryptedText.split(":");
|
|
171
|
+
const [
|
|
172
|
+
{
|
|
173
|
+
default: {
|
|
174
|
+
mode: { CBC }
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
{ default: Pkcs7 },
|
|
178
|
+
{ default: Base64 },
|
|
179
|
+
{ default: Utf8 },
|
|
180
|
+
{ default: SHA256 },
|
|
181
|
+
{
|
|
182
|
+
default: { decrypt }
|
|
183
|
+
}
|
|
184
|
+
] = await Promise.all([
|
|
185
|
+
import("crypto-js/core.js"),
|
|
186
|
+
import("crypto-js/pad-pkcs7.js"),
|
|
187
|
+
import("crypto-js/enc-base64.js"),
|
|
188
|
+
import("crypto-js/enc-utf8.js"),
|
|
189
|
+
import("crypto-js/sha256.js"),
|
|
190
|
+
import("crypto-js/aes.js")
|
|
191
|
+
]);
|
|
192
|
+
try {
|
|
193
|
+
const iv = Base64.parse(ivBase64);
|
|
194
|
+
const derivedKey = SHA256(key);
|
|
195
|
+
const decrypted = decrypt(encryptedBase64, derivedKey, {
|
|
196
|
+
iv,
|
|
197
|
+
mode: CBC,
|
|
198
|
+
padding: Pkcs7
|
|
199
|
+
});
|
|
200
|
+
return decrypted.toString(Utf8);
|
|
201
|
+
} catch (error) {
|
|
202
|
+
console.error("Decryption error:", error);
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
109
206
|
// Annotate the CommonJS export names for ESM import in node:
|
|
110
207
|
0 && (module.exports = {
|
|
111
208
|
advancedDecrypt,
|
|
112
209
|
advancedEncrypt,
|
|
113
210
|
decryptAES,
|
|
114
|
-
|
|
211
|
+
decryptWithCryptoJS,
|
|
212
|
+
encryptAES,
|
|
213
|
+
encryptWithCryptoJS
|
|
115
214
|
});
|
|
116
215
|
//# sourceMappingURL=crypto.js.map
|
package/lib/utils/crypto.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/crypto.ts"],
|
|
4
|
-
"sourcesContent": ["import { base64ToString, stringToBase64 } from './base64';\nimport { random } from './math';\nimport { randomChars } from './string';\n\n/** Secret. No description provided */\nexport async function advancedEncrypt(plainText: string, key: string) {\n const k1 = randomChars(36);\n let e = await encryptAES(plainText, k1);\n const b = stringToBase64(k1);\n const l = b.length;\n const s = random(0, e.length);\n e = e.substring(0, s) + b + e.substring(s);\n const r = stringToBase64(`${s}-${l}`);\n const t = `${e}.${r}`;\n return encryptAES(t, key);\n}\n\n/** Secret. No description provided */\nexport async function advancedDecrypt(encryptedText: string, key: string) {\n const decrypted = await decryptAES(encryptedText, key);\n const [e, r] = decrypted.split('.');\n const [s, l] = base64ToString(r).split('-').map(Number);\n const k1 = base64ToString(e.substring(s, s + l));\n return decryptAES(e.substring(0, s) + e.substring(s + l), k1);\n}\n\n/**\n * **EN**: General AES encryption function - supports both Node.js and browser environments\n *\n * **CN**: 通用 AES 加密函数 - 同时支持 Node.js 和浏览器环境\n *\n * @param {string} text The text to be encrypted | 要加密的文本\n * @param {string} key The encryption key | 加密密钥\n *\n * @returns {Promise<string>} The encrypted text | 加密后的文本\n */\nexport async function encryptAES(text: string, key: string): Promise<string> {\n const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n if (isNode) {\n // Node.js\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const crypto = require('crypto');\n const derivedKey = crypto.createHash('sha256').update(key).digest();\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv('aes-256-cbc', derivedKey, iv);\n let encrypted = cipher.update(text, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n return `${iv.toString('base64')}:${encrypted}`;\n } else {\n // Browsers\n
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { base64ToString, stringToBase64 } from './base64';\nimport { random } from './math';\nimport { randomChars } from './string';\n\n/** Secret. No description provided */\nexport async function advancedEncrypt(plainText: string, key: string) {\n const k1 = randomChars(36);\n let e = await encryptAES(plainText, k1);\n const b = stringToBase64(k1);\n const l = b.length;\n const s = random(0, e.length);\n e = e.substring(0, s) + b + e.substring(s);\n const r = stringToBase64(`${s}-${l}`);\n const t = `${e}.${r}`;\n return encryptAES(t, key);\n}\n\n/** Secret. No description provided */\nexport async function advancedDecrypt(encryptedText: string, key: string) {\n const decrypted = await decryptAES(encryptedText, key);\n const [e, r] = decrypted.split('.');\n const [s, l] = base64ToString(r).split('-').map(Number);\n const k1 = base64ToString(e.substring(s, s + l));\n return decryptAES(e.substring(0, s) + e.substring(s + l), k1);\n}\n\n/**\n * **EN**: General AES encryption function - supports both Node.js and browser environments\n *\n * **CN**: 通用 AES 加密函数 - 同时支持 Node.js 和浏览器环境\n *\n * @param {string} text The text to be encrypted | 要加密的文本\n * @param {string} key The encryption key | 加密密钥\n *\n * @returns {Promise<string>} The encrypted text | 加密后的文本\n */\nexport async function encryptAES(text: string, key: string): Promise<string> {\n const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n if (isNode) {\n // Node.js\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const crypto = require('crypto');\n const derivedKey = crypto.createHash('sha256').update(key).digest();\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv('aes-256-cbc', derivedKey, iv);\n let encrypted = cipher.update(text, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n return `${iv.toString('base64')}:${encrypted}`;\n } else {\n if (crypto.subtle) {\n // Browsers\n try {\n const iv = crypto.getRandomValues(new Uint8Array(16));\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const hashBuffer = await crypto.subtle.digest('SHA-256', keyData);\n const cryptoKey = await crypto.subtle.importKey('raw', hashBuffer, { name: 'AES-CBC' }, false, ['encrypt']);\n const textBytes = encoder.encode(text);\n const encryptedBuffer = await crypto.subtle.encrypt({ name: 'AES-CBC', iv }, cryptoKey, textBytes);\n const ivBase64 = btoa(String.fromCharCode(...iv));\n const encryptedBase64 = btoa(String.fromCharCode(...new Uint8Array(encryptedBuffer)));\n return `${ivBase64}:${encryptedBase64}`;\n } catch (error) {\n console.error('Encryption error:', error);\n throw error;\n }\n } else {\n // let encrypt: typeof CryptoJS.AES.encrypt;\n // try {\n // const aes = await import('crypto-js/aes');\n // encrypt = aes.encrypt;\n // } catch (error) {\n // console.error('Load \"crypto-js/aes\" error:', error);\n // throw error;\n // }\n // try {\n // return encrypt(text, key).toString();\n // } catch (error) {\n // console.error('Encryption error:', error);\n // throw error;\n // }\n return encryptWithCryptoJS(text, key);\n }\n }\n}\n\n/**\n * **EN**: General AES decryption function - supports both Node.js and browser environments\n *\n * **CN**: 通用 AES 解密函数 - 同时支持 Node.js 和浏览器环境\n *\n * @param encryptedText The encrypted text (format: iv:encryptedContent, base64 encoded)\n * @param key The decryption key\n *\n * @returns The decrypted text\n */\nexport async function decryptAES(encryptedText: string, key: string): Promise<string> {\n const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n try {\n const [ivBase64, encryptedBase64] = encryptedText.split(':');\n if (!ivBase64 || !encryptedBase64) {\n throw new Error('Invalid encrypted format');\n }\n if (isNode) {\n // Node.js\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const crypto = require('crypto');\n const iv = Buffer.from(ivBase64, 'base64');\n const encryptedBuffer = Buffer.from(encryptedBase64, 'base64');\n const derivedKey = crypto.createHash('sha256').update(key).digest();\n const decipher = crypto.createDecipheriv('aes-256-cbc', derivedKey, iv);\n let decrypted = decipher.update(encryptedBuffer);\n decrypted = Buffer.concat([decrypted, decipher.final()]);\n return decrypted.toString('utf8');\n } else {\n if (crypto.subtle) {\n // Browsers with Web Crypto API, in secure contexts (HTTPS)\n const iv = Uint8Array.from(atob(ivBase64), (c) => c.charCodeAt(0));\n const encryptedData = Uint8Array.from(atob(encryptedBase64), (c) => c.charCodeAt(0));\n const encoder = new TextEncoder();\n const keyData = encoder.encode(key);\n const hashBuffer = await crypto.subtle.digest('SHA-256', keyData);\n const cryptoKey = await crypto.subtle.importKey('raw', hashBuffer, { name: 'AES-CBC' }, false, ['decrypt']);\n const decryptedBuffer = await crypto.subtle.decrypt({ name: 'AES-CBC', iv }, cryptoKey, encryptedData);\n const decoder = new TextDecoder();\n return decoder.decode(decryptedBuffer);\n } else {\n // Browsers without Web Crypto API, or insecure contexts (HTTP), fallback to CryptoJS\n // let decrypt: typeof CryptoJS.AES.decrypt;\n // let utf8: typeof CryptoJS.enc.Utf8;\n // try {\n // const [aes, encUtf8] = await Promise.all([import('crypto-js/aes'), import('crypto-js/enc-utf8')]);\n // decrypt = aes.decrypt;\n // utf8 = encUtf8.default;\n // } catch (error) {\n // console.error('Load \"crypto-js/aes\" error:', error);\n // throw error;\n // }\n // try {\n // const decrypted = decrypt(encryptedText, key);\n // return decrypted.toString(utf8);\n // } catch (error) {\n // console.error('Decryption error:', error);\n // throw error;\n // }\n return decryptWithCryptoJS(encryptedText, key);\n }\n }\n } catch (error) {\n console.error('Decryption error:', error);\n return '';\n }\n}\nexport async function encryptWithCryptoJS(text: string, key: string) {\n const [\n {\n default: {\n mode: { CBC },\n lib: { WordArray },\n },\n },\n { default: Pkcs7 },\n { default: Base64 },\n { default: Utf8 },\n { default: SHA256 },\n {\n default: { encrypt },\n },\n ] = await Promise.all([\n import('crypto-js/core.js'),\n import('crypto-js/pad-pkcs7.js'),\n import('crypto-js/enc-base64.js'),\n import('crypto-js/enc-utf8.js'),\n import('crypto-js/sha256.js'),\n import('crypto-js/aes.js'),\n ]);\n\n try {\n // Convert text and key to WordArray objects\n const wordArray = Utf8.parse(text);\n const keyArray = SHA256(key);\n const iv = WordArray.random(16);\n\n const encryptedBase64 = Base64.stringify(\n encrypt(wordArray, keyArray, {\n iv,\n mode: CBC,\n padding: Pkcs7,\n }).ciphertext\n );\n return `${Base64.stringify(iv)}:${encryptedBase64}`;\n } catch (error) {\n console.error('Encryption error:', error);\n throw error;\n }\n}\n\nexport async function decryptWithCryptoJS(encryptedText: string, key: string) {\n const [ivBase64, encryptedBase64] = encryptedText.split(':');\n\n const [\n {\n default: {\n mode: { CBC },\n },\n },\n { default: Pkcs7 },\n { default: Base64 },\n { default: Utf8 },\n { default: SHA256 },\n {\n default: { decrypt },\n },\n ] = await Promise.all([\n import('crypto-js/core.js'),\n import('crypto-js/pad-pkcs7.js'),\n import('crypto-js/enc-base64.js'),\n import('crypto-js/enc-utf8.js'),\n import('crypto-js/sha256.js'),\n import('crypto-js/aes.js'),\n ]);\n\n try {\n // Convert base64 strings to WordArray objects\n const iv = Base64.parse(ivBase64);\n // Derive key using SHA-256 (matching native implementation)\n const derivedKey = SHA256(key);\n const decrypted = decrypt(encryptedBase64, derivedKey, {\n iv,\n mode: CBC,\n padding: Pkcs7,\n });\n return decrypted.toString(Utf8);\n } catch (error) {\n console.error('Decryption error:', error);\n throw error;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["crypto"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiny-codes/react-easy",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.11",
|
|
4
4
|
"description": "Simplify React and AntDesign development with practical components and hooks",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"@lexical/react": "^0.33.1",
|
|
42
42
|
"@microsoft/fetch-event-source": "^2.0.1",
|
|
43
43
|
"@stomp/stompjs": "^7.1.1",
|
|
44
|
+
"crypto-js": "^4.2.0",
|
|
44
45
|
"i18next": "^24.2.3",
|
|
45
46
|
"lexical": "^0.33.1",
|
|
46
47
|
"react-contexify": "^6.0.0",
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"devDependencies": {
|
|
50
51
|
"@tiny-codes/code-style-all-in-one": "^1.1.5",
|
|
51
52
|
"@tiny-codes/eslint-plugin-react-hooks": "^4.6.0",
|
|
53
|
+
"@types/crypto-js": "^4.2.2",
|
|
52
54
|
"@types/jest": "^29.5.14",
|
|
53
55
|
"@types/node": "^22.15.32",
|
|
54
56
|
"@types/react": "^19.0.12",
|