2009-01-08 56 views
2

使用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或交互式輸入密碼 - 同樣的問題。

回答

3

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

6162636465666768是ASCII 「ABCDEFGH」 十六進制寫出來。

但請注意,ECB模式下的DES可能不是編碼密碼的好方法,也不是您可能聽說過在Unix系統上使用的「DES crypt」。 (對於密碼,通常最好使用難以反轉的算法(通過重新生成結果來檢查密碼,而不是解密存儲的密碼)即使您確實需要能夠解密這些加密的密碼,單DES尤其是歐洲央行在保密方面的選擇不佳)

+0

當然,我打算使用Blowfish CBC,我只是抓取樣本DES代碼進行快速測試=) 感謝您的幫助! – 2009-01-09 21:35:45