2011-09-12 48 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尖端真正使它更具可读性,谢谢! –