2013-08-27 4 views
1

Кажется, у меня проблема с получением правильного значения команды 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 

Здесь вход второго столбца в текстовом файле, который является «$ {строка [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 

что правильное значение хэш-функции. Почему это не работает, как оно должно работать? Кажется, что код прав, но значение хеша выводится совершенно иначе, чем оно должно быть. Любая помощь по этому вопросу была бы весьма признательна.

ответ

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}" 
+0

Вы имеете в виду, как это: '" $ {line [1]} "?' Без двойных кавычек получается тот же результат – Beardy

+0

@Beardy При чтении из файла значение, взятое из второго столбца, будет включать в себя двойные кавычки, окружающие его. Выполнение чего-то типа 'echo '$ {line [1]}" 'будет печатать' '123456789'', который включает в себя кавычки, тогда как цитированная литеральная строка, например. 'echo" 123456789 "' будет печатать только '123456789'. – konsolebox

+0

Я вижу, что вы говорите. Я пробовал оба варианта с входным файлом, и, похоже, он производит тот же результат. Я собираюсь попробовать, что вы положили для кода, и посмотреть, могу ли я получить правильные результаты. Оставайтесь с нами – Beardy

Смежные вопросы