Управление подписью в почтальоне с CryptoJS - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь интегрировать некоторые действия, которые я выполняю с bash, в тесты Postman для вызовов 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 я не нашел команду для двоичного файла, поэтомуЯ пытаюсь преобразовать строку в двоичный файл с помощью функции, которую я нашел.

Можете ли вы помочь мне?

Спасибо

1 Ответ

0 голосов
/ 15 октября 2019

Для части вычисления дайджеста я решил следующим образом:

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

Может кто-нибудь помочь мне выяснить, где я не прав?

...