【发布时间】:2014-05-26 15:33:48
【问题描述】:
我找到了构建哈希值的解决方案:
echo -n wicked | shasum | awk '{print $1}'
但这仅适用于字符串输入。我不知道如何将输入处理为十六进制,例如,如果我想构建 sha1-value 的 sha1-value。
upd: 我刚刚发现有用于 shasum 的选项 -b,但它会产生错误的输出。它是否期望具有反转字节序的字节?
upd2: 例如:我做如下输入:
echo -n 9e38cc8bf3cb7c147302f3e620528002e9dcae82 | shasum -b | awk '{print $1}'
输出是bed846bb1621d915d08eb1df257c2274953b1ad9,但根据hash calculator,输出应该是9d371d148d9c13050057105296c32a1368821717
upd3:-b 选项似乎根本不起作用。我是否应用这个参数没有区别,我得到相同的结果。
upd4: 整个脚本如下所示。它不起作用,因为在我分配或连接时会删除空字节。
password="wicked"
scrumble="4d~k|OS7T%YqMkR;pA6("
stage1_hash=$(echo -n $password| shasum | awk '{print $1}')
stage2_hash=$(echo $(echo -n $stage1_hash | xxd -r -p | shasum | awk '{print $1}') | xxd -r -p)
token=$(./xor.sh $(echo -n $scrumble$(echo 9d371d148d9c13050057105296c32a1368821717 | xxd -r -p) | shasum | awk '{print $1}') $stage1_hash)
echo $token
【问题讨论】:
-
openssl命令可以帮助你。见 [HMAC-SHA1 in bash][1] [1]: stackoverflow.com/questions/7285059/hmac-sha1-in-bash