@polyv/request-plugin-aes-decrypt 2.7.0 → 2.8.0
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/README.md +42 -37
- package/aes-decrypt-plugin.d.ts +1 -1
- package/aes-decrypt-plugin.js +1 -1
- package/package.json +5 -3
- package/request-options.d.ts +1 -1
- package/utils.d.ts +1 -1
- package/utils.js +1 -2
package/README.md
CHANGED
|
@@ -4,45 +4,42 @@
|
|
|
4
4
|
|
|
5
5
|
## 实例化参数
|
|
6
6
|
|
|
7
|
-
| 参数名
|
|
8
|
-
|
|
|
9
|
-
| `decryptKeys`
|
|
10
|
-
| `decryptPosition` | 解密位置
|
|
11
|
-
| `getDecryptInfo`
|
|
7
|
+
| 参数名 | 用途 | 类型 | 默认值 |
|
|
8
|
+
| ----------------- | ------------------ | -------------------- | --------------------------------- |
|
|
9
|
+
| `decryptKeys` | 解密密钥信息 | `AESKeyInfo` | - |
|
|
10
|
+
| `decryptPosition` | 解密位置 | `AESDecryptPosition` | `AESDecryptPosition.ResponseData` |
|
|
11
|
+
| `getDecryptInfo` | 获取解密信息的方法 | `function` | - |
|
|
12
12
|
|
|
13
13
|
## 请求选项
|
|
14
14
|
|
|
15
|
-
| 参数名
|
|
16
|
-
|
|
|
17
|
-
| `useAESDecrypt`
|
|
18
|
-
| `aesDecryptInfo` | AES 解密信息
|
|
15
|
+
| 参数名 | 用途 | 类型 | 默认值 |
|
|
16
|
+
| ---------------- | ----------------- | ---------------- | ------- |
|
|
17
|
+
| `useAESDecrypt` | 是否使用 AES 解密 | `boolean` | `false` |
|
|
18
|
+
| `aesDecryptInfo` | AES 解密信息 | `AESDecryptInfo` | - |
|
|
19
19
|
|
|
20
20
|
## 解密密钥信息类型
|
|
21
21
|
|
|
22
22
|
`AESKeyInfo` 类型如下:
|
|
23
23
|
|
|
24
|
-
| 参数名 | 用途
|
|
25
|
-
|
|
|
26
|
-
| `sign` | 解密签名(密钥) | `string` | -
|
|
27
|
-
| `iv`
|
|
24
|
+
| 参数名 | 用途 | 类型 | 默认值 |
|
|
25
|
+
| ------ | ---------------- | -------- | ------ |
|
|
26
|
+
| `sign` | 解密签名(密钥) | `string` | - |
|
|
27
|
+
| `iv` | 解密偏移量 | `string` | - |
|
|
28
28
|
|
|
29
29
|
## 解密位置枚举
|
|
30
30
|
|
|
31
31
|
`AESDecryptPosition` 枚举如下:
|
|
32
32
|
|
|
33
|
-
| 枚举值
|
|
34
|
-
|
|
|
35
|
-
| `AESDecryptPosition.WholeResponse` | 解密整个响应数据
|
|
36
|
-
| `AESDecryptPosition.ResponseData`
|
|
33
|
+
| 枚举值 | 描述 |
|
|
34
|
+
| ---------------------------------- | ------------------------ |
|
|
35
|
+
| `AESDecryptPosition.WholeResponse` | 解密整个响应数据 |
|
|
36
|
+
| `AESDecryptPosition.ResponseData` | 仅解密响应中的 data 字段 |
|
|
37
37
|
|
|
38
38
|
## 使用方式
|
|
39
39
|
|
|
40
40
|
```js
|
|
41
41
|
import { PolyvRequest } from '@polyv/request-core';
|
|
42
|
-
import {
|
|
43
|
-
AESDecryptRequestPlugin,
|
|
44
|
-
AESDecryptPosition
|
|
45
|
-
} from '@polyv/request-plugin-aes-decrypt';
|
|
42
|
+
import { AESDecryptRequestPlugin, AESDecryptPosition } from '@polyv/request-plugin-aes-decrypt';
|
|
46
43
|
|
|
47
44
|
// 基础用法:使用固定的解密密钥
|
|
48
45
|
const requester = new PolyvRequest({
|
|
@@ -53,7 +50,7 @@ const requester = new PolyvRequest({
|
|
|
53
50
|
iv: 'yourDecryptIV',
|
|
54
51
|
},
|
|
55
52
|
}),
|
|
56
|
-
]
|
|
53
|
+
],
|
|
57
54
|
});
|
|
58
55
|
|
|
59
56
|
// 配置解密位置
|
|
@@ -66,14 +63,14 @@ const requester = new PolyvRequest({
|
|
|
66
63
|
},
|
|
67
64
|
decryptPosition: AESDecryptPosition.WholeResponse,
|
|
68
65
|
}),
|
|
69
|
-
]
|
|
66
|
+
],
|
|
70
67
|
});
|
|
71
68
|
|
|
72
69
|
// 使用 getDecryptInfo 方法动态获取解密信息
|
|
73
70
|
const requester = new PolyvRequest({
|
|
74
71
|
requestPlugins: [
|
|
75
72
|
new AESDecryptRequestPlugin({
|
|
76
|
-
getDecryptInfo: async
|
|
73
|
+
getDecryptInfo: async options => {
|
|
77
74
|
// 可以根据 options 中的信息动态获取解密密钥
|
|
78
75
|
return {
|
|
79
76
|
decryptKeys: {
|
|
@@ -84,25 +81,33 @@ const requester = new PolyvRequest({
|
|
|
84
81
|
};
|
|
85
82
|
},
|
|
86
83
|
}),
|
|
87
|
-
]
|
|
84
|
+
],
|
|
88
85
|
});
|
|
89
86
|
|
|
90
87
|
// 在某个请求中启用 AES 解密
|
|
91
|
-
requester.get(
|
|
92
|
-
|
|
93
|
-
}
|
|
88
|
+
requester.get(
|
|
89
|
+
'/api/data',
|
|
90
|
+
{},
|
|
91
|
+
{
|
|
92
|
+
useAESDecrypt: true,
|
|
93
|
+
},
|
|
94
|
+
);
|
|
94
95
|
|
|
95
96
|
// 在某个请求中使用特定的解密信息
|
|
96
|
-
requester.get(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
requester.get(
|
|
98
|
+
'/api/data',
|
|
99
|
+
{},
|
|
100
|
+
{
|
|
101
|
+
useAESDecrypt: true,
|
|
102
|
+
aesDecryptInfo: {
|
|
103
|
+
decryptKeys: {
|
|
104
|
+
sign: 'specificKey',
|
|
105
|
+
iv: 'specificIV',
|
|
106
|
+
},
|
|
107
|
+
decryptPosition: AESDecryptPosition.WholeResponse,
|
|
102
108
|
},
|
|
103
|
-
decryptPosition: AESDecryptPosition.WholeResponse,
|
|
104
109
|
},
|
|
105
|
-
|
|
110
|
+
);
|
|
106
111
|
```
|
|
107
112
|
|
|
108
113
|
## 解密处理逻辑
|
|
@@ -110,4 +115,4 @@ requester.get('/api/data', {}, {
|
|
|
110
115
|
1. 插件默认不启用,需要在请求选项中设置 `useAESDecrypt: true` 或全局配置启用
|
|
111
116
|
2. 解密信息的优先级为:请求选项中的 `aesDecryptInfo` > `getDecryptInfo` 方法返回的信息 > 初始化时提供的配置
|
|
112
117
|
3. 根据 `decryptPosition` 的设置,可以选择解密整个响应数据或只解密响应中的 data 字段
|
|
113
|
-
4. 解密后,如果解密结果是有效的 JSON 字符串,会自动解析为 JavaScript 对象
|
|
118
|
+
4. 解密后,如果解密结果是有效的 JSON 字符串,会自动解析为 JavaScript 对象
|
package/aes-decrypt-plugin.d.ts
CHANGED
package/aes-decrypt-plugin.js
CHANGED
|
@@ -45,7 +45,7 @@ export class AESDecryptRequestPlugin {
|
|
|
45
45
|
};
|
|
46
46
|
if (typeof this.__config.getDecryptInfo === 'function') {
|
|
47
47
|
// 第二优先:实例化参数的 getDecryptInfo
|
|
48
|
-
const res = await this.__config.getDecryptInfo(options) || {};
|
|
48
|
+
const res = (await this.__config.getDecryptInfo(options)) || {};
|
|
49
49
|
info = { ...info, ...res };
|
|
50
50
|
}
|
|
51
51
|
if (options.aesDecryptInfo) {
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polyv/request-plugin-aes-decrypt",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"main": "./index.js",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@polyv/request-core": "2.
|
|
6
|
+
"@polyv/request-core": "2.8.0",
|
|
7
7
|
"aes-js": "^3.1.2",
|
|
8
8
|
"crypto-js": "^4.1.1",
|
|
9
9
|
"js-base64": "^3.7.5"
|
|
10
10
|
},
|
|
11
|
-
"types": "./index.d.ts"
|
|
11
|
+
"types": "./index.d.ts",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"miniprogram": "./"
|
|
12
14
|
}
|
package/request-options.d.ts
CHANGED
package/utils.d.ts
CHANGED
package/utils.js
CHANGED
|
@@ -14,7 +14,7 @@ const str2ab = (str, len) => {
|
|
|
14
14
|
if (bytesLen >= len) {
|
|
15
15
|
return bytes.slice(0, len);
|
|
16
16
|
}
|
|
17
|
-
return
|
|
17
|
+
return [].concat(...new Array(Math.ceil(len / bytesLen)).fill(bytes)).slice(0, len);
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
20
|
* 解密数据(hex 方式)
|
|
@@ -75,7 +75,6 @@ export function decryptTextHex(encryptedText, sign, customIV) {
|
|
|
75
75
|
if (customIV) {
|
|
76
76
|
iv = str2ab(customIV, 16);
|
|
77
77
|
}
|
|
78
|
-
// eslint-disable-next-line
|
|
79
78
|
const aesCfb = new aesjs.ModeOfOperation.cbc(key, iv);
|
|
80
79
|
const decryptedBytes = aesCfb.decrypt(encryptedBytes);
|
|
81
80
|
const decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes);
|