Надлежащие опции для openssl с простым шифрованным текстом

Полагаю, цель состоит в том, чтобы убедиться, что эти каталоги пусты после перезагрузки. Эти тарандиски потребляют лишь крошечное количество оперативной памяти.

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

.
1
18.06.2014, 17:58
2 ответа

инструмент командной строки openssl является демонстрацией библиотеки OpenSSL. Она имеет довольно бессистемный интерфейс и плохую документацию. Я не рекомендую использовать его ни для чего, кроме тестирования библиотеки OpenSSL. (Да, есть люди, которые управляют ЦС с помощью openssl. Боюсь за их вменяемость.)

AES работает с ключом, а не с паролем. Ключ AES-128 равен ровно 16 байтам.

Опция -k не принимает ключ за ввод, а берет пароль. Этот пароль хэшируется для получения ключа; по умолчанию используется MD5 и его можно переопределить опцией командной строки -md. Это не документировано в руководстве, насколько я вижу, вы просто должны прочитать источник (apps/enc.c, вызвать EVP_BytesToKey). Дайджест MD5 выдает 16-байтовое значение из любой строки, но это не то, что здесь использовалось. В данном случае ключом на самом деле является REDRYDER\0\0\0\0\0\0, где \0 - нулевые байты.

Опция -K позволяет передать ключ, в шестнадцатеричной системе. Если передается меньше байт, чем размер ключа, то OpenSSL завершается нулевым байтом. Таким образом, чтобы передать ключ -COPY17\0\0\0\0\0, можно передать $(echo REDRYDER | od -An -tx1 | tr -d ' '), что равно 5245445259444552.

Операция расшифровки AES-128-ECB блока шифрованного текста FC89BFC2B05F1C2E64B8784392783AC9 с ключом 524544525944455200000000000000 дает 464c41473d4441495359000000000000 (используя шестнадцатеричную форму для представления последовательностей байтов). Это FLAG=DAISY\0\0\0\0\0.

За небольшие криптографические манипуляции, подобные этим, мне нравится топ-уровень Python с библиотекой Pycrypto.

>>> from binascii import hexlify, unhexlify
>>> from Crypto.Cipher import AES
>>> ciphertext = unhexlify('FC 89 BF C2 B0 5F 1C 2E 64 B8 78 43 92 78 3A C9'.replace(' ', ''))
>>> key = 'REDRYDER'.ljust(16, '\0')
>>> AES.new(key, AES.MODE_ECB).decrypt(ciphertext)
'FLAG=DAISY\x00\x00\x00\x00\x00\x00'
2
27.01.2020, 23:38

Это работает:

echo '0: FC89BFC2B05F1C2E64B8784392783AC9' | xxd -r | openssl enc -aes-128-ecb -d -nopad -nosalt -K 5245445259444552

Я не понимаю ввода для опции -k, но если вы конвертируете ваш простой текстовый ключ в hex (правильный порядок байт) и используете вместо него -K, это работает.

openssl - это вуду!

.
0
27.01.2020, 23:38

Теги

Похожие вопросы