【问题标题】:issues with openssl and getting correct valuesopenssl 问题和获取正确值
【发布时间】:2013-08-30 12:03:12
【问题描述】:

我似乎在获取 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

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

【问题讨论】:

    标签: linux bash unix hash openssl


    【解决方案1】:

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

    你可以试试这个脚本:

    #!/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}"
    

    【讨论】:

    • 你的意思是这样的:"${line[1]}"? 没有双引号会产生相同的结果
    • @Beardy 从文件读取时,从第二列获取的值将包括它周围的双引号。执行echo "${line[1]}" 之类的操作会打印"123456789",其中包括引号,而带引号的文字字符串例如echo "123456789" 只会打印 123456789
    • 我明白你在说什么。我已经用输入文件尝试了两种方法,它似乎产生了相同的结果。我将尝试你为代码输入的内容,看看我是否能得到正确的结果。敬请期待
    • 这很奇怪。以您的示例"524786870","1376051635",2483a818fac3e5214697f1ed76d92e2f54d4a277 为例,它适用于我。请尝试改用bash script.sh &lt; input 执行脚本。还要确保它不是以 CRLF 格式复制的。当我运行我的脚本时,我得到了"524786870","1376051635",f8d822c6b46a2eb4e35bb4d76b8ce2e336d541e8
    • 老兄就是这样!删除引号和转换为 unix 类型的组合。结果现在正在相应地打印!谢谢人:)
    猜你喜欢
    • 2022-01-22
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2013-03-08
    • 1970-01-01
    • 2017-05-31
    相关资源
    最近更新 更多