
Я пытаюсь сделать очень простую вещь, а именно использовать 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, The Standard Data Encryption Algorithm, стр. 75–94, Petrocelli Books Inc., Нью-Йорк, 1977»:
Key: 5B5A57676A56676E
Plaintext: 675A69675E5A6B5A
Ciphertext: 974AFFBF86022D1F
решение1
Открытый текст также представлен в шестнадцатеричном формате. Перед шифрованием его необходимо преобразовать обратно в двоичный.