Шифрование с использованием 64-битного DES с openssl - PullRequest
2 голосов
/ 12 сентября 2011

Я пытаюсь сделать очень простую вещь, а именно использовать 64-битный пароль и 64-битный открытый текст (оба в шестнадцатеричном виде) и зашифровать его с помощью простого старого DES.

мой скрипт выглядит так:

plaintext=`echo -n "$2" | sed 's/\(..\)/\\\x\1/g'`
key=$1
printf "$plaintext" | openssl enc -nosalt -e -des -nopad -K "$key" -iv "0000000000000000" | od --format=x1 --width=32 --address-radix=n | sed 's/ //g'

Я выполняю и получаю следующий результат:

./des_enc 5B5A57676A56676E 675A69675E5A6B5A
b617e2c84a4fba2149dd7132433031392257b99d9284b1031c351c15825aca52

Проблема в том, что из openssl возвращается слишком много данных, я ожидаю получить только 64-битные данные, а не 512. Я не знаю, как явно запросить 64-битную версию DES, даже если возможно

Примечание: значения, использованные выше, взяты из "H. Katzan, Стандартный алгоритм шифрования данных, стр. 75-94, Petrocelli Books Inc., Нью-Йорк, 1977":

Key:        5B5A57676A56676E
Plaintext:  675A69675E5A6B5A
Ciphertext: 974AFFBF86022D1F

1 Ответ

6 голосов
/ 12 сентября 2011

Используйте -des-ecb.Кроме того, xxd делает этот конвейер намного чище, если он у вас есть (он входит в пакет vim):

sh % echo 675A69675E5A6B5A | xxd -r -ps | openssl enc -des-ecb -nopad -K 5B5A57676A56676E | xxd -ps
974affbf86022d1f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...