在bash openssl中创建一个base64 md5哈希,在node.js中等效于此

时间:2018-03-16 10:17:49

标签: node.js bash openssl

我目前正在努力使用openssl在bash中生成预期的哈希值。

在node.js和c#中,我有代码生成一个值为kzStnMJObO9gC8gtliznGcTPUeIeIs+OGrwKnUnB34I=的输出哈希值。

哈希值是:IAmAValueToHash

用于散列的HMAC密钥为:M2VlMzRiOTFiNmM0NDY2YWI0MTAxZmZi

我正在尝试编写一些使用openssl生成相同输出哈希的bash代码。

示例node.js代码:

const { createHmac } = require('crypto');

const valueToHash = 'IAmAValueToHash';

// base 64 encoded format key
const key = 'M2VlMzRiOTFiNmM0NDY2YWI0MTAxZmZi';

const hash = createHmac('sha256', new Buffer(key, 'base64'))
    .update(valueToHash)
    .digest('base64');

console.log(hash);

在bash中,我目前有以下脚本:

#!/bin/bash

valueToHash="IAmAValueToHash"
key="M2VlMzRiOTFiNmM0NDY2YWI0MTAxZmZi"

printf "%s" "$valueToHash" >> temp.txt

decodedKey=$(echo -n ${key} | base64 --decode)
echo ${decodedKey}

signature=$(openssl md5 -sha256 -hmac ${decodedKey} temp.txt | openssl enc -base64)
printf "%s" "$signature" >> temp2.txt

echo ${signature}
hash=$(sed -n '2p' temp2.txt)
echo ${hash}

rm temp*.txt

bash脚本当前生成的值是:  N2Y3NmI2NDAwNDVmOTdiNTAyODE2N2U5Y2U1ZjYwYzkyNzZkZmVjCg==

我需要的地方是: kzStnMJObO9gC8gtliznGcTPUeIeIs+OGrwKnUnB34I=

1 个答案:

答案 0 :(得分:0)

在使用openssl和各种输入输出格式进行大量播放后,以下bash实现创建了所需的输出。

#!/bin/bash

valueToHash="IAmAValueToHash"
key="M2VlMzRiOTFiNmM0NDY2YWI0MTAxZmZi"

rm -f tmp_*

printf "%s" "$valueToHash" >> tmp_valueToHash
printf "%s" "$key" >> tmp_key

decodedKey=$(base64 --decode -i tmp_key)
openssl dgst -sha256 -binary -hmac ${decodedKey} tmp_valueToHash >> tmp_hashed
base64Hash=$(base64 -i tmp_hashed)
echo ${base64Hash}

rm tmp_*