LINUX.ORG.RU

[openssl] Шифрование файла паролем

 


0

1

Зашифровал файл паролем через `openssl enc`, но при расшифровке

openssl enc -d -aes-256-cbc -pass env:PASS -in encoded-file
`openssl` пытается его расшифровать на основе введённого, пусть даже неверного, пароля. Если пароль неверный, то на выходе будет абракадабра, но всё равно неприятно, ибо дальше это по конвейеру идёт другим программам, которые считают входной поток нормальным.

(Правда иногда `openssl` всё же вылетает с ошибками вроде

bad decrypt
3073586824:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:467:
где-то на середине «расшифровываемого» потока.)

Как заставить `openssl` как-то *проверять* верность пароля и выдавать ошибку, если он неверный?


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

А? Какой шаблон? Какой цикл?.. Файл зашифрован. После расшифровки он идёт конвейером через всякие программы. Формата файла особого нет: поток бинарных данных. Не суть. Пользователь программы может случайно ввести пароль неверно (очепятаться, например). Но вместо «Ошибка. Неверный пароль.» он прочитает в лучшем случае то, что я написал «bad decrypt...», в плохом — ошибка всплывёт в какой-нибудь следующей по конвейеру программе, а в худшем пользователь вообще не узнает, что программа работает неверно.

Вопрос в другом. Как научить openssl как-то заранее проверять пароль. И можно ли вообще. (Если нет, то некуда деваться — буду сам это делать, хотя бы по солёному md5.)

toady2
() автор топика

Ясен пень, поставить libastral.sо версии поновее.

ЗЫ: Молодой человек, у вас в голове каша. Рекомендую изучить матчасть, прежде чем задавать глупые вопросы.

Macil ★★★★★
()

Чтобы решить подобную проблему я (правда в рамках своей программы) кодирую файл вместе с приаттаченой вначале md5 от исходного файла. При раскадировке выкусываю первые 16 байт и проверяю что они являются md5 от остальных данных. Если не являются - очевидно пароль введен не верно.

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

Это, понятное дело, ослабляет кодирование (т.к. теперь есть четкая проверка для перебора, но не для суперсекретных данных этого достаточно - время перебора 16 буквенного пароля все равно достаточно велико.

theos ★★★
()
Ответ на: комментарий от toady2
#!/bin/bash
LOG="/dev/null"
SRC="source_file"
dmesg | tail -n 20 > $SRC
PASS=my_super_mega_pass openssl enc -e -aes-256-cbc \
 -pass env:PASS -in $SRC -out encoded_file


SRC="encoded_file"
DST="decoded_file_OK"
PASS=my_super_mega_pass openssl enc -d -aes-256-cbc \
 -pass env:PASS -in $SRC -out $DST 2>>$LOG \
 || echo "invalid password" > $DST

DST="decoded_file_ERR"
PASS=incorrect_password openssl enc -d -aes-256-cbc \
 -pass env:PASS -in $SRC -out $DST 2>>$LOG \
 || echo "invalid password" > $DST

#end_of_file
DiMoN ★★★
()
Ответ на: комментарий от toady2

Вот ты заморочился. Прочитай внимательней предыдущий комментарий от DiMoN. Явно же: если всё хорошо, то возвращается 0, а если была ошибка, openssl возвращает 1, как и абсолютное большинство программ. openssl при упаковке в конец файла дописывает байты для выравнивания на границу 8 байт. 1 по 0x01, 2 по 0x02, 3 по 0x03 и так далее до 7. Если длина файла кратна 8, то дописывается 8 0x08. После распаковки он их отрезает. Вполне достаточная проверка на целостность, быть может даже надёжнее, чем md5-хэш.

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