我目前正在努力使用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=
。
答案 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_*