2011-09-12 72 views
2

我試圖做一個非常簡單的事情,即使用64位密碼和64位明文(均爲十六進制),並用簡單的舊DES進行加密。使用64位DES與openssl加密

我的劇本是這樣的:

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,標準的數據加密算法,pp75-94,佩特羅切利圖書公司,紐約,1977年」 是:

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

回答

5

使用-des-ecb。此外,xxd使這條管道乾淨多了,如果你有它方便(這是vim的包的一部分):

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

是偉大的工作,也是XXD尖端真正使它更具可讀性,謝謝! –