我似乎遇到了在散列时获取正确的openssl命令值的问题。这是我的代码。
IFS=","
while read -ra line;
do
if [ "${line[1]}" != "" ]; then
echo -n "${line[*]},"; echo -n "${line[1]}" | openssl dgst -sha1 | sed 's/^.* //' ;
else
if [ "${line[1]}" == "" ]; then
echo "${line[*]}, Hash Value: None";
fi
fi
done
以下是文本文件中第二列的输入,代码中为“$ {line [1]}”。
"1376051635"
这就是我运行命令的方式:
./orange.sh < "C:\Documents and Settings\562359\Desktop\Analytics\persons\persons.txt"
输出到屏幕是这样的:
"524786870","1376051635",2483a818fac3e5214697f1ed76d92e2f54d4a277
第三列是第二列的散列值,但它不正确。当我运行此命令时
echo -n "1376051635" | openssl dgst -sha1
我的输出是:
(stdin)= f8d822c6b46a2eb4e35bb4d76b8ce2e336d541e8
这是正确的哈希值。为什么这不起作用它应该如何工作?似乎代码是正确的,但哈希值的输出完全不同于它应该是的。对此问题的任何帮助将不胜感激。
答案 0 :(得分:2)
你包括双引号,这就是为什么你得到不同的价值。
你可以尝试这个脚本:
#!/bin/bash
IFS=","
while read -ra line; do
if [[ -n ${line[1]} ]]; then
second_value=${line[1]#\"} second_value=${second_value%\"}
hash_value=$(echo -n "$second_value" | openssl dgst -sha1 | sed 's/^.* //')
echo "${line[*]},${hash_value}" ## Or should ${hashvalue} be surrounded by quotes?: \"${hash_value}\"
else
echo "${line[*]}, Hash Value: None"
fi
done
注意:如果您计划替换之前的哈希值,请改用此行:
echo "${line[*]:0:2},${hash_value}"