添加新包
打开 HTTP 请求、集合、或者文件夹,然后选择 Scripts 选项。
选择 Pre-request 或 Post-response 选项。
打开代码编辑器右侧的窗口,然后选择 Open package library。
SM2 加解密
- 选择 New package。
- 输入包名:
sm2
。
- 将代码粘贴到窗口中。
- 选择 Create。
SM4 加解密
- 选择 New package。
- 输入包名:
sm4utils
。
- 将代码粘贴到窗口中。
- 选择 Create。
添加环境变量
- 选择右侧按钮,选择 Add。
- 在打开的窗口中添加变量
sm4key
、sm2key
内容为 SM4 密钥、SM2 密钥。
- 选择 Save 。
- 右上角选择设置的环境变量。
编写脚本
打开 HTTP 请求,然后选择 Scripts 选项。
选择 Pre-request 选项,添加如下代码:
Post-response SM2 加密
const sm2 = pm.require('sm2')
try { var jsonData = JSON.parse(pm.request.body.raw)
var date = new Date() const year = String(date.getFullYear()) const month = String(date.getMonth() + 1).padStart(2, "0") const day = String(date.getDate()).padStart(2, "0") const hour = String(date.getHours()).padStart(2, "0") const minute = String(date.getMinutes()).padStart(2, "0") const second = String(date.getSeconds()).padStart(2, "0")
var dateStr = `${year}${month}${day}${hour}${minute}${second}`
jsonData.askTime = dateStr
pm.environment.set('sm4key', jsonData.symmetricKey)
const cipherMode = 0 var key = pm.environment.get("sm2key");
var content = JSON.stringify(jsonData) var encryptData = sm2.doEncrypt(content, key, cipherMode)
encryptData = '04' + encryptData pm.request.body = encryptData
} catch (e) { console.log(e); }
|
Post-response SM4 加密
const sm4 = pm.require('sm4utils')
var encryptBody = sm4.encrypt(String(pm.request.body), pm.environment.get("sm4key"));
pm.request.body = encryptBody;
|
选择 Post-response 选项,添加如下代码:
Post-response SM4 解密
const sm4 = pm.require('sm4utils')
const jsonResult = pm.response.json() var decryptBody
if (jsonResult.code != 2000) { decryptBody = jsonResult.msg
} else { pm.environment.set('access_token', jsonResult.access_token)
decryptBody = sm4.decrypt(String(jsonResult.encryptDatas), pm.environment.get("sm4key")) }
var resp = { response: decryptBody }
var template = `<head> <style> pre { outline: 1px solid #ccc; padding: 5px; margin: 5px; }
.string { color: green; }
/*字符串的样式*/ .number { color: darkorange; }
/*数字的样式*/ .boolean { color: blue; }
/*布尔型数据的样式*/ .null { color: magenta; }
/*null值的样式*/ .key { color: red; }
/*key值的样式*/ </style> </head>
<body> <pre id="result">嘿嘿</pre>
<script> function syntaxHighlight(json) {
json = json.replaceAll('"', '"');
try { json = JSON.parse(json) } catch (e) { console.log(json) json = '{"msg":"' + json + '"}' } if (typeof json != 'string') { json = JSON.stringify(json, undefined, 2); } json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { var cls = 'number'; if (/^"/.test(match)) { if (/:$/.test(match)) { cls = 'key'; } else { cls = 'string'; } } else if (/true|false/.test(match)) { cls = 'boolean'; } else if (/null/.test(match)) { cls = 'null'; } return '<span class="' + cls + '">' + match + '</span>'; } ); }
document.getElementById("result").innerHTML = syntaxHighlight('{{response}}'); </script> </body>`;
pm.visualizer.set(template, resp)
|
发送请求
在 Body 中填写加密前的 json 参数即可。
在 Visualize 中可以看到将 encryptDatas
解密后的 json 数据。
参考
sm-crypto
后端生成的密钥对,前端加密成功,但无法解密
在 html 页面中展示 JSON