我如何(成功)从命令行openSSL解码编码的密码?

使用PyCrypto(尽pipe我已经在ObjC中用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' 

很简单。 我应该能够pipe这个输出到OpenSSL并解码它:

我testing以确保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或交互式input密码 – 同样的问题。

echo ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg== | openssl enc -nopad -a -des-ecb -K 6162636465666768 -iv 0 -p -d

6162636465666768是用十六进制写出的ASCII“abcdefgh”。

但请注意,ECB模式下的DES可能不是编码密码的好方法,也不是您可能听说过在Unix系统上使用的“DES crypt”。 (对于密码,通常最好使用难以反转的算法(通过重新生成结果来检查密码,而不是解密存储的密码),即使你确实需要解密这些加密的密码,单DES和特别是欧洲央行在保密方面的选择不佳。)