openssl的问题并获得正确的值

时间:2013-08-27 16:07:58

标签: linux bash unix hash openssl

我似乎遇到了在散列时获取正确的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

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

1 个答案:

答案 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}"