2011-09-12 5 views
2

저는 아주 간단한 작업을하려고합니다. 즉, 64 비트 암호와 64 비트 일반 텍스트 (16 진수 모두)를 사용하고 간단한 old DES로 암호화하려고합니다.openssl을 사용하여 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 

문제는, 내가 64을 얻을 것으로 기대하려면 openssl에서 돌아 오는 너무 많은 데이터가 거기에있다 데이터의 비트 대신 512를 얻습니다. 64 비트 버전의 DES를 명시 적으로 요청하는 방법을 알지 못합니다. 심지어 가능합니까?

참고 : 위에 사용 된 값은 "H. Katzan, 표준 데이터 암호화 알고리즘, pp75-94, Petrocelli 책 사, 뉴욕 1977"에서 있습니다 것은 :

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

답변

5

사용 -des-ecb. 큰 일

sh % echo 675A69675E5A6B5A | xxd -r -ps | openssl enc -des-ecb -nopad -K 5B5A57676A56676E | xxd -ps 
974affbf86022d1f 
+4

는 또한 xxd 팁 정말 감사합니다 더 읽을 수 있습니다 : 당신이 편리 (가 정력 패키지의 일부)이있는 경우 또한, xxd,이 파이프 라인을 훨씬 깨끗합니다! –

관련 문제