1

在对 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

这是正确的哈希值。为什么这不起作用它应该如何工作?似乎代码是正确的,但输出的哈希值与应有的完全不同。对此问题的任何帮助将不胜感激。

4

1 回答 1

3

您包含双引号,这就是您获得不同值的原因。

你可以试试这个脚本:

#!/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}"
于 2013-08-27T16:10:32.530 回答