[我正在尝试将在邮递员测试中使用bash运行的一些活动集成到API Rest调用中。
我需要打这两个电话
$(echo -n $3 | openssl dgst -binary -sha256 | openssl base64)
==> 91154Zn0Qu8FdLBMZGMbqeubI4TtUZvesHxaaMcWa+Y=
$(printf %s "$sign" | openssl dgst -sha256 -binary -sign "privateKey.key" | openssl base64 -A)
为此,我正在尝试使用CryptoJS库,但是得到的结果却不一样,而且我也不知道哪里出错了。
function textToBin(text) {
return (
Array
.from(text)
.reduce((acc, char) => acc.concat(char.charCodeAt().toString(2)), [])
.map(bin => '0'.repeat(8 - bin.length) + bin )
.join(' ')
);
}
var bodySHA= CryptoJS.SHA256(textToBin('body body')).toString();
var bodyParse=CryptoJS.enc.Base64.parse(bodySHA);
var bodyBase64=CryptoJS.enc.Base64.stringify(bodyParse);
console.log(bodyBase64);
===> e6382c53fc78cf2db0e10f103ed4859446bf917b1e1730633974a8df2092cfeb
使用CryptoJS时,我没有找到用于二进制文件的命令,所以我正尝试使用找到的函数将字符串转换为二进制文件。
你能帮我吗?
谢谢
对于摘要计算的一部分,我是这样解决的:
function calculateDigest() {
const requestData = request.data.toString();
const sha256digest = CryptoJS.SHA256(requestData);
const base64sha256 = CryptoJS.enc.Base64.stringify(sha256digest);
const calculatedDigest = 'SHA-256=' + base64sha256;
pm.environment.set("Digest", calculatedDigest);
return calculatedDigest;
}
不幸的是,对于签名,看来我公开的命令序列无法重现使用openssl制作的正确序列
$(printf %s "$sign" | openssl dgst -sha256 -binary -sign "privateKey.key" | openssl base64 -A)
function encryptSignature(normalizedSignatureString) {
const messageDigest = forge.md.sha256.create();
const privateKey = forge.pki.privateKeyFromPem(pm.globals.get("private_key"));
console.log("privateKey" +privateKey);
messageDigest.update(normalizedSignatureString, "utf8");
console.log("messageDigest " +messageDigest);
const signature = privateKey.sign(messageDigest);
let buff = new Buffer(signature);
const signatureBase = buff.toString('base64');
console.log("signatureHex--> "+signatureBase);
return signatureBase;
}
有人可以帮我弄清楚我哪里错了吗?