LINUX.ORG.RU

Ответ на: комментарий от PPP328

Спасибо. А нельзя ли это как-то через пайп передавать другой программе? Типа: cat file.txt | sha256sum | программа

napulsnik
() автор топика
Ответ на: комментарий от napulsnik

Можно

cat file.txt | while IFS= read -r var; do echo "$var" | sha256sum; done | cowsay
Или так:
while IFS= read -r var; do echo "$var" | sha256sum; done < file.txt | cowsay

Вместо cowsay — любая другая программа.

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 2)

Открываешь файл в GTKHash и вуаля.

anonymous
()
Ответ на: комментарий от Psych218

Почему-то выдает только 1 хэш:

# cat 1key.txt | while IFS= read -r var; do echo «$var» | sha256sum; done 1857017c9249136e642e23f3ca500d45391437907c9e6dc3f7ff5f60f1d9d362 -

# while IFS= read -r var; do echo «$var» | sha256sum; done < 1key.txt 1857017c9249136e642e23f3ca500d45391437907c9e6dc3f7ff5f60f1d9d362 -

napulsnik
() автор топика
Ответ на: комментарий от napulsnik

Странно. УМВР.

% while IFS= read -r var; do echo "$var" | sha256sum; done < 1key.txt
b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c  -
ea9c38202e91fa5ee09e003c9c605885a98ecb4253c0e0f0a4d076b52cf492e7  -
bf07a7fbb825fc0aae7bf4a1177b2b31fcf8a3feeaf7092761e18c859ee52a9c  -

% cat 1key.txt
foo
bar bar
baz

можешь показать свой cat 1key.txt?

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 2)
Ответ на: комментарий от Psych218

Спасибо, все работает. Строк показывало 1 почему-то. Последнюю строку не учитывало.

napulsnik
() автор топика
Ответ на: комментарий от Psych218

Работает, но выдает не тот хэщ :-) Может там знак переноса строки учитывается или еще что...

Например у слова «pizza» правильный хэш - 9ed1515819dec61fd361d5fdabb57f41ecce1a5fe1fe263b98c0d6943b9b232e

А вот результат команды:

# cat 1key.txt | while IFS= read -r var; do echo «$var» | sha256sum; done b03bd3c14859fd0bf37e8d102c0c4e31a2061c8732e77c97df20b048bafd067f - b03bd3c14859fd0bf37e8d102c0c4e31a2061c8732e77c97df20b048bafd067f - b03bd3c14859fd0bf37e8d102c0c4e31a2061c8732e77c97df20b048bafd067f -

# cat 1key.txt pizza pizza pizza

napulsnik
() автор топика
Ответ на: комментарий от napulsnik

Уверен, что файл записан в кодировке UTF-8?
Уверен, что правильно сгенерировал locale в OS?

Всё работает, как нужно.

% while IFS= read -r var; do echo "$var" | sha256sum; done < 1key.txt && cat 1key.txt 
d38877f9854d375004e75eefc62a0eee04a4d7bacabf8e4be51a229ecb254f91  -
c5b69ce61cf80e4e0f95aaaf0686e0843e7841554b084104838fc288174855c0  -
d9080178279a44d81ed587f26209c4149ded9903bca0e25bf196e902b5c9111a  -
loli
carder planet
сам ты шлюха пративная

blitz
()

Ждём «вирус» Vasya под онтопик?

dhameoelin ★★★★★
()
Ответ на: комментарий от blitz

Файл создавался в notapad++ UTF-8 без BOM. Из вашего примера взял слово «loli» и проверил в некольких онлайн сервисах. Выдает везде: 0b67579a10e1bdf91d85e65414dc38fcab9b973a97ab661a169a0813338ce7bd

napulsnik
() автор топика
Ответ на: комментарий от blitz

Это все происходит из-за того, что хэшируется символ переноса строки. Если в файле 1 строка, то все ok.

napulsnik
() автор топика
Ответ на: комментарий от Psych218

read -r var

Если переменная одна и read не во вложенном цикле, то результат в $REPLY

Вместо cat xxx.txt можно писать < xxx.txt

anonymous
()
Ответ на: комментарий от napulsnik

Файл создавался в notapad++

У тебя там небось \r\n вместо \n.

dos2unix key1.txt
Psych218 ★★★★★
()
Ответ на: комментарий от napulsnik

Буду знать, что у тебя выдает 0b67579a вместо d38877f
Тем не менее, сегодня ставил несколько пакетов и все они проходии проверку на sha256.

Мораль сей басни такова, сделай для себя и для меня

% cat /etc/locale.conf
LANG=en_US.UTF-8

blitz
()
Ответ на: комментарий от napulsnik

После echo добавь ключ -n, по умолчанию echo добавляет перенос строки. Дело тут даже не в содержимом файла.


% echo -n foo | sha256sum
2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae  -
% echo -n "bar bar" | sha256sum
4b239a300fdfc77783dbec14b002c87b1431fd5bf5b00a56844d2b14211cf09f  -
% echo -n baz | sha256sum
baa5a0964d3320fbc0c6a922140453c8513ea24ab8fd0577034804a967248096  -
% while IFS= read -r var; do echo -n "$var" | sha256sum; done < 1key.txt
2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae  -
4b239a300fdfc77783dbec14b002c87b1431fd5bf5b00a56844d2b14211cf09f  -
baa5a0964d3320fbc0c6a922140453c8513ea24ab8fd0577034804a967248096  -
/tmp/tmp.ec8jqy6vqy % cat 1key.txt
foo
bar bar
baz
Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 3)
Ответ на: комментарий от anonymous

Если переменная одна и read не во вложенном цикле, то результат в $REPLY

Это башизм. Их лучше избегать. К тому же, мы даже не знаем, какой шелл у ТС.

Вместо cat xxx.txt можно писать < xxx.txt

Я в курсе, в сообщении, на которое ты отвечал, два варианта.

Psych218 ★★★★★
()
Ответ на: комментарий от Psych218

В моем случае dos2unix тоже обязательно нужно было. Без этого не работает.

napulsnik
() автор топика
from hashlib import sha256

lines = [sha256(x).hexdigest() for x in open('test.txt').read().splitlines()]

for line in lines:
    print(line)

для python3 - вместо .read() - .read().encode('utf-8')

buratino ★★★★★
()
Ответ на: комментарий от buratino

vasya 2.0 - теперь единый код для python2 и python3

from hashlib import sha256
from io import open

lines = [sha256(x).hexdigest() for x in open('test.txt','rb').read().splitlines()]

for line in lines:
    print(line)
buratino ★★★★★
()

Никак. SHA256 не шифрует, а хеширует. Это преобразование необратимо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.