parsec-libs 0.0.225-ertong → 0.0.226-ertong

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 CHANGED
@@ -14,3 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
14
14
  ### Added
15
15
 
16
16
  - 版本号 0.0.225-ertong
17
+
18
+ ### Changed
19
+
20
+ - aes 加密模式切换为 ceb
@@ -1,2 +1,2 @@
1
- export declare function encryptAES(text: string): string;
2
- export declare function decryptAES(encryptedHex: string): string;
1
+ export declare function encryptAES(plainText: any): string;
2
+ export declare function decryptAES(cipherBase64: any): string;
package/lib/utils/aes.js CHANGED
@@ -8,50 +8,68 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.encryptAES = encryptAES;
9
9
  exports.decryptAES = decryptAES;
10
10
 
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+
11
13
  var _aesJs = _interopRequireDefault(require("aes-js"));
12
14
 
13
- // 必须是 16 字节(128 位)的 key
14
- var key = _aesJs.default.utils.utf8.toBytes('tfPY4ceiCfhOGmsNnILk89EqjHsB5fPWypIE97PY1os'); // 加密
15
+ var FIXED_KEY = 'tfPY4ceiCfhOGmsNnILk89EqjHsB5fPWypIE97PY1os';
15
16
 
17
+ function base64ToBytes(base64) {
18
+ var binaryString = atob(base64);
19
+ return Uint8Array.from(binaryString, function (c) {
20
+ return c.charCodeAt(0);
21
+ });
22
+ }
16
23
 
17
- function encryptAES(text) {
18
- var textBytes = _aesJs.default.utils.utf8.toBytes(text); // 使用 ECB 模式,注意需要补齐为 16 字节块
24
+ function pkcs7Pad(data) {
25
+ var blockSize = 16;
26
+ var padLength = blockSize - data.length % blockSize;
27
+ var padding = new Uint8Array(padLength).fill(padLength);
28
+ return Uint8Array.from([].concat((0, _toConsumableArray2.default)(data), (0, _toConsumableArray2.default)(padding)));
29
+ }
19
30
 
31
+ function encryptAES(plainText) {
32
+ try {
33
+ // 1. Base64 解码密钥
34
+ var keyBytes = base64ToBytes(FIXED_KEY); // 2. 将明文转为字节数组
20
35
 
21
- var paddedTextBytes = padZeroToBlock(textBytes);
22
- var aesEcb = new _aesJs.default.ModeOfOperation.ecb(key);
23
- var encryptedBytes = aesEcb.encrypt(paddedTextBytes); // 转为十六进制字符串(也可以用 Base64)
36
+ var textBytes = _aesJs.default.utils.utf8.toBytes(plainText); // 3. PKCS7 填充
24
37
 
25
- return _aesJs.default.utils.hex.fromBytes(encryptedBytes);
26
- } // 解密
27
38
 
39
+ var paddedBytes = pkcs7Pad(textBytes); // 4. 创建 AES ECB 加密器
28
40
 
29
- function decryptAES(encryptedHex) {
30
- var encryptedBytes = _aesJs.default.utils.hex.toBytes(encryptedHex);
41
+ var aesEcb = new _aesJs.default.ModeOfOperation.ecb(keyBytes); // 5. 加密
31
42
 
32
- var aesEcb = new _aesJs.default.ModeOfOperation.ecb(key);
33
- var decryptedBytes = aesEcb.decrypt(encryptedBytes); // 去除填充
43
+ var encryptedBytes = aesEcb.encrypt(paddedBytes); // 6. 返回 base64 编码结果
34
44
 
35
- var unpadded = removePadding(decryptedBytes);
36
- return _aesJs.default.utils.utf8.fromBytes(unpadded);
37
- } // ------- 工具函数 -------
38
- // AES 块大小为 16 字节,补 0
45
+ var encryptedBase64 = btoa(String.fromCharCode.apply(String, (0, _toConsumableArray2.default)(encryptedBytes)));
46
+ return encryptedBase64;
47
+ } catch (e) {
48
+ throw new Error('AES加密失败: ' + e.message);
49
+ }
50
+ }
39
51
 
52
+ function pkcs7Unpad(data) {
53
+ var padLength = data[data.length - 1];
54
+ return data.slice(0, data.length - padLength);
55
+ }
40
56
 
41
- function padZeroToBlock(bytes) {
42
- var padding = 16 - bytes.length % 16;
43
- var padded = new Uint8Array(bytes.length + padding);
44
- padded.set(bytes);
45
- return padded;
46
- } // 移除结尾的 0
57
+ function decryptAES(cipherBase64) {
58
+ try {
59
+ // 1. Base64 解码密钥和密文
60
+ var keyBytes = base64ToBytes(FIXED_KEY);
61
+ var encryptedBytes = base64ToBytes(cipherBase64); // 2. 创建 AES 解密器(ECB 模式)
47
62
 
63
+ var aesEcb = new _aesJs.default.ModeOfOperation.ecb(keyBytes); // 3. 解密
48
64
 
49
- function removePadding(bytes) {
50
- var i = bytes.length;
65
+ var decryptedBytes = aesEcb.decrypt(encryptedBytes); // 4. 去除 PKCS7 填充
51
66
 
52
- while (i > 0 && bytes[i - 1] === 0) {
53
- i--;
54
- }
67
+ var unpaddedBytes = pkcs7Unpad(decryptedBytes); // 5. 转成 UTF8 字符串
55
68
 
56
- return bytes.slice(0, i);
69
+ var decryptedText = _aesJs.default.utils.utf8.fromBytes(unpaddedBytes);
70
+
71
+ return decryptedText;
72
+ } catch (e) {
73
+ throw new Error('AES解密失败: ' + e.message);
74
+ }
57
75
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parsec-libs",
3
- "version": "0.0.225-ertong",
3
+ "version": "0.0.226-ertong",
4
4
  "scripts": {
5
5
  "start": "dumi dev",
6
6
  "docs:build": "dumi build",