我正在尝试做一件非常简单的事情,即使用一个 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,标准数据加密算法,第 75-94 页,Petrocelli Books Inc.,纽约,1977 年”:
Key: 5B5A57676A56676E
Plaintext: 675A69675E5A6B5A
Ciphertext: 974AFFBF86022D1F
答案1
明文也是十六进制的。加密前必须将其转换回二进制。