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

これは、テキスト ファイルの 2 番目の列 (コードの "${line[1]}") の入力です。

"1376051635"

これは私がコマンドを実行している方法です:

./orange.sh < "C:\Documents and Settings\562359\Desktop\Analytics\persons\persons.txt"

画面への出力は次のとおりです。

"524786870","1376051635",2483a818fac3e5214697f1ed76d92e2f54d4a277

3 列目は 2 列目のハッシュ値ですが、正しくありません。このコマンドを実行すると

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 に答える