
나는 매우 간단한 작업을 수행하려고 합니다. 즉, 64비트 비밀번호와 64비트 일반 텍스트(둘 다 16진수)를 사용하고 이를 간단한 이전 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에서 너무 많은 데이터가 돌아오고 있다는 것입니다. 대신 512를 얻는 대신 64비트 데이터만 얻을 것으로 예상합니다. 64비트 버전의 DES를 명시적으로 요청하는 방법을 모르겠습니다. 가능합니까?
참고: 위에 사용된 값은 "H. Katzan, The Standard Data Encryption Algorithm, pp75-94, Petrocelli Books Inc., New York, 1977"에서 가져온 것입니다.
Key: 5B5A57676A56676E
Plaintext: 675A69675E5A6B5A
Ciphertext: 974AFFBF86022D1F
답변1
일반 텍스트도 16진수로 제공됩니다. 암호화하기 전에 다시 바이너리로 변환해야 합니다.