командная строка openssl для шифрования RC4, не ожидаемый результат, не понимаю

наверное глупый вопрос, но я не могу понять. В настоящее время я использую этот веб-сайт: http://www.fyneworks.com/encryption/rc4-encryption/ для шифрования rc4 для проверки концепции. Например, я ввожу «а» в виде открытого текста, «а» в качестве пароля и получаю «71» в качестве зашифрованного текста (это ASCII-представление «q»). Я хотел сделать то же самое из командной строки, используя openssl:

> echo a | openssl rc4 -nosalt  -out /tmp/uuu 
enter rc4 encryption password:
Verifying - enter rc4 encryption password:

> cat /tmp/uuu | xxd
0000000: 5896                                     X.

Итак, мы получаем «5896» вместо «71», и это то, чего я не понимаю. Если бы мне кто-нибудь объяснил, был бы признателен.

Благодарю вас !


person I am ttt    schedule 01.12.2011    source источник
comment
echo по умолчанию добавляет новую строку, поэтому строка, которую вы шифруете, на самом деле является \n. Попробуйте вместо этого использовать echo -n, что позволит пропустить завершающую новую строку. К сожалению, запуск a\n с помощью онлайн-инструмента приводит к ошибке 71B6.   -  person daxelrod    schedule 02.12.2011
comment
Возможно проблема в кодировке ключа.   -  person Will Bickford    schedule 02.12.2011
comment
@daxelrod: действительно, поскольку это потоковый шифр, добавление конечных символов к открытому тексту не изменит значение первого зашифрованного байта. Вы также можете передать ключ в командной строке со значением -pass pass:a, это не изменит результат.   -  person I am ttt    schedule 02.12.2011


Ответы (2)


Благодаря другу мы разобрались в чем дело. Он сказал мне распечатать ключ

echo -ne "a" |  openssl  rc4 -pass pass:a -e  -nopad    -nosalt -p
key=0CC175B9C0F1B6A831C399E269772661

Мы видим, что добавлены некоторые отступы с 0x61, который мы ввели в конце. Получается openssl генерирует ключ из пасса.

Вместо этого, если мы введем непосредственно ключ с опцией -K:

echo -ne "a" |  openssl  rc4 -K 61 -e  -nopad    -nosalt -p
key=61000000000000000000000000000000

Мы видим, что есть дополнение с «0». На самом деле он не хочет, чтобы мы использовали слишком маленький ключ (поскольку для rc4 ключ должен иметь длину не менее 40 бит). Теперь попробуем с ключом 128b:

echo -ne "foobar" |  openssl  rc4 -K "6162636465666768696A6B6C6D6E6F70" -e  -nopad    -nosalt  | xxd
0000000: caaf 2cbf d334                           ..,..4

Результат такой же, как и на странице :)

person I am ttt    schedule 02.12.2011
comment
Привет, можем ли мы использовать пароль вместо K и получить тот же результат, что и на веб-странице? - person AKS; 05.01.2018

Работа в процессе

Вот вам интересный узор. Используя «0» в качестве ключа шифрования, мы получаем сильные тенденции между открытым текстом и зашифрованным текстом. Смотри ниже.

Что меня интересует в разнице между двумя реализациями, так это то, что fyne увеличивается монотонно, в то время как OpenSSL немного ступенчатый. Я еще раз взгляну на это позже - я отмечаю это как вики сообщества, так как я еще не считаю это ответом, но я подумал, что анализ может помочь.

точно:

0(0) = B8
0(1) = B9
0(2) = BA
0(3) = BB
0(4) = BC
0(5) = BD
0(6) = BE
0(7) = BF
0(8) = B0
0(9) = B1

OpenSSL:

0(0) = 72
0(1) = 73
0(2) = 70
0(3) = 71
0(4) = 76
0(5) = 77
0(6) = 74
0(7) = 75
0(8) = 7A
0(9) = 7B

Используемые команды

cat -n N > /tmp/test #Where n is a number
openssl rc4 -e -nosalt -in /tmp/test -out /tmp/uuu
cat /tmp/uuu |xxd
person Community    schedule 02.12.2011