dream-common 1.1.46 → 1.1.47
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/lib/CryptoJS/HttpRequest.js +19 -25
- package/package.json +1 -1
|
@@ -42,24 +42,14 @@ export function createSecureData(request = {}) {
|
|
|
42
42
|
*/
|
|
43
43
|
export function encryptSecureData(request = {}, privateKey, useBase64 = true) {
|
|
44
44
|
// 1. 生成签名原文(排除 encData, signData, data)
|
|
45
|
-
const
|
|
46
|
-
// 2. SM2 签名(DER 格式,与 Java Bouncy Castle 兼容)
|
|
47
|
-
const signValueStr = sm2.doSignature(signSource, privateKey, {
|
|
48
|
-
der: true
|
|
49
|
-
}).toLowerCase();
|
|
50
|
-
|
|
51
|
-
const signValue = useBase64 ? hexToBase64(signValueStr) : signValueStr;
|
|
52
|
-
// 3. 生成 SM4 密钥和 IV(通过 MD5)
|
|
53
|
-
const hashData = sm3(signValue) // 杂凑
|
|
54
|
-
const keyHex = md5_32(signValue + hashData); // 32 hex → 16 bytes
|
|
55
|
-
const ivHex = md5_32(signSource + keyHex + hashData); // 32 hex → 16 bytes
|
|
56
|
-
console.log("signValue: " + signValue);
|
|
57
|
-
console.log("hashData: " + hashData);
|
|
58
|
-
console.log("keyHex: " + keyHex);
|
|
59
|
-
console.log("ivHex: " + ivHex);
|
|
45
|
+
const queryStr = objectToSignString(request, 'encData', 'signData', 'data');
|
|
60
46
|
// 4. 序列化业务数据
|
|
61
47
|
const dataJson = typeof request.data === 'string' ? request.data : JSON.stringify(request.data);
|
|
62
48
|
|
|
49
|
+
// 3. 生成 SM4 密钥和 IV(通过 MD5)
|
|
50
|
+
const hashData = sm3(queryStr) // 杂凑
|
|
51
|
+
const keyHex = md5_32(queryStr + hashData); // 32 hex → 16 bytes
|
|
52
|
+
const ivHex = md5_32(queryStr + keyHex + hashData); // 32 hex → 16 bytes
|
|
63
53
|
// 5. SM4 加密(CBC + PKCS#7)
|
|
64
54
|
const encDataHex = sm4.encrypt(dataJson, keyHex, {
|
|
65
55
|
iv: ivHex,
|
|
@@ -67,9 +57,18 @@ export function encryptSecureData(request = {}, privateKey, useBase64 = true) {
|
|
|
67
57
|
padding: 'pkcs#7',
|
|
68
58
|
cipherType: 1, // hex output
|
|
69
59
|
});
|
|
70
|
-
|
|
71
60
|
// 6. 转换为最终格式(hex 或 base64)
|
|
72
61
|
const encData = useBase64 ? hexToBase64(encDataHex) : encDataHex;
|
|
62
|
+
request.encData = encData;
|
|
63
|
+
const signSource = objectToSignString(request, 'signData', 'data');
|
|
64
|
+
// 2. SM2 签名(DER 格式,与 Java Bouncy Castle 兼容)
|
|
65
|
+
const signValueStr = sm2.doSignature(signSource, privateKey, {
|
|
66
|
+
der: true
|
|
67
|
+
}).toLowerCase();
|
|
68
|
+
const signValue = useBase64 ? hexToBase64(signValueStr) : signValueStr;
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
73
72
|
|
|
74
73
|
// 7. 返回可传输对象(移除 data)
|
|
75
74
|
const {
|
|
@@ -108,17 +107,12 @@ export function verifySecureSign(request, publicKey, useBase64 = true) {
|
|
|
108
107
|
*/
|
|
109
108
|
export function decryptSecureData(request, privateKey, useBase64 = true) {
|
|
110
109
|
// 1. 重算签名原文(用于生成 key/iv)
|
|
111
|
-
const
|
|
112
|
-
const hashData = sm3(
|
|
113
|
-
const keyHex = md5_32(
|
|
114
|
-
const ivHex = md5_32(
|
|
115
|
-
console.log("sm3: " + hashData);
|
|
116
|
-
console.log("keyHex: " + keyHex);
|
|
117
|
-
console.log("ivHex: " + ivHex);
|
|
110
|
+
const queryStr = objectToSignString(request, 'encData', 'signData', 'data');
|
|
111
|
+
const hashData = sm3(queryStr) // 杂凑
|
|
112
|
+
const keyHex = md5_32(queryStr + hashData); // 32 hex → 16 bytes
|
|
113
|
+
const ivHex = md5_32(queryStr + keyHex + hashData); // 32 hex → 16 bytes
|
|
118
114
|
// 3. 处理 encData(base64 → hex)
|
|
119
|
-
|
|
120
115
|
const encDataHex = useBase64 ? base64ToHex(request.encData) : request.encData;
|
|
121
|
-
|
|
122
116
|
// 4. SM4 解密
|
|
123
117
|
const decrypted = sm4.decrypt(encDataHex, keyHax, {
|
|
124
118
|
iv: lvHax,
|