使用CryptoJS进行邮递员的签名管理

问题描述 投票:0回答:1

[我正在尝试将在邮递员测试中使用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时,我没有找到用于二进制文件的命令,所以我正尝试使用找到的函数将字符串转换为二进制文件。

你能帮我吗?

谢谢

postman cryptojs postman-pre-request-script
1个回答
0
投票

对于摘要计算的一部分,我是这样解决的:

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;
}

有人可以帮我弄清楚我哪里错了吗?

© www.soinside.com 2019 - 2024. All rights reserved.