如何(成功)从命令行openSSL解码编码密码?
问题描述:
使用PyCrypto(虽然我已经试过这在ObjC与OpenSSL的绑定以及):如何(成功)从命令行openSSL解码编码密码?
from Crypto.Cipher import DES
import base64
obj=DES.new('abcdefgh', DES.MODE_ECB)
plain="Guido van Rossum is a space alien.XXXXXX"
ciph=obj.encrypt(plain)
enc=base64.b64encode(ciph)
#print ciph
print enc
输出的base64编码值:
ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg==
如果你是在解释,CIPH会给你
'\x11,\xe3Nq\x8cDY\xdfT\xe2pA\xfa\xad\xc9s\x88\xf3,\xc0j\xd8\xa8\xca\xe7\xe2I\xd15w\x1d61\xc3dgb/\x06'
够简单。我应该能够管此输出到OpenSSL和解码它:
我测试,以确保B64解码工程 -
python enctest.py | openssl enc -base64 -d
+ python enctest.py
+ openssl enc -base64 -d
,?Nq?DY?T?pA???s??,?jب???I?5w61?dgb/
不漂亮,但是你可以看到,它得到了解码精“ dgb“和”Nq“仍然存在。
但去为完整的东西:
python enctest.py | openssl enc -base64 -d | openssl enc -nosalt -des-ecb -d -pass pass:abcdefgh
+ python enctest.py
+ openssl enc -nosalt -des-ecb -d -pass pass:abcdefgh
+ openssl enc -base64 -d
bad decrypt
15621:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:461:
j?7????vc]???LE?m³??q?
我在做什么错?我已经尝试使用-k abcdefgh -iv 0000000000000000或交互式输入密码 - 同样的问题。
答
echo ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg== | openssl enc -nopad -a -des-ecb -K 6162636465666768 -iv 0 -p -d
6162636465666768是ASCII “ABCDEFGH” 十六进制写出来。
但请注意,ECB模式下的DES可能不是编码密码的好方法,也不是您可能听说过在Unix系统上使用的“DES crypt”。 (对于密码,通常最好使用难以反转的算法(通过重新生成结果来检查密码,而不是解密存储的密码)即使您确实需要能够解密这些加密的密码,单DES尤其是欧洲央行在保密方面的选择不佳)
当然,我打算使用Blowfish CBC,我只是抓取样本DES代码进行快速测试=) 感谢您的帮助! – 2009-01-09 21:35:45