本文實例講述了python有證書的加密解密實現方法。分享給大家供大家參考。具體實現方法如下:
最近在做python的加解密工作,同時加完密的串能在php上能解出來,網上也找了一些靠譜的資料,剛好也有時間我就總結了一下python在加密與解密這塊的代碼,今后可能還能用的上。相對于php而言python這塊加解密組件較多的,分別是:
python-crypto - 這個組件是基本組件,使用的函式相對比較復雜。
ezPyCrypto - 相對簡單,但他作出來的公私鑰無法與其他程序相兼容 SSLCrypto - 與 ezPyCrypto 是相同一個作者開發,效率上要比ezPyCrypto 好。但一樣不能與其它程序相兼容。
pyopenssl - 似乎是用在https 通訊上的,而我找不到加解密的用法。
M2Crypto - 終于讓我找到了,但它有一大缺點,它底層是用 SWIG 與 OpenSSL 交接的。
在Windows安裝SWIG 程序是非常難的。
我選擇使用的是M2Crypto,公鑰與私鑰證書生成有兩個方式,一種采用RSA生成,另一種是X509生成。我就把這兩種加解密代碼分享出來,供大家參考,但轉載或使用時請寫明出處。
一、 RSA標準方式生成的證書
1.加密解密、加密簽名、驗證加密簽名
代碼如下:#encoding: utf8
import os
import M2Crypto
#隨機數生成器(1024位隨機)
M2Crypto.Rand.rand_seed(os.urandom(1024))
#生成一個1024位公鑰與私密鑰證書
Geekso = M2Crypto.RSA.gen_key(1024, 65537)
Geekso.save_key('jb51.net-private.pem', None)
Geekso.save_pub_key('jb51.net-public.pem')
#使用公鑰證書加密開始
WriteRSA = M2Crypto.RSA.load_pub_key('jb51.net-public.pem')
CipherText = WriteRSA.public_encrypt("這是一個秘密消息,只能用私鑰進行解密",M2Crypto.RSA.pkcs1_oaep_padding)
print "加密的串是:"
print CipherText.encode('base64')
#對加密串進行簽名
MsgDigest = M2Crypto.EVP.MessageDigest('sha1')
MsgDigest.update(CipherText)
#提示,這里也可以使用私鑰簽名
#WriteRSA = M2Crypto.RSA.load_key ('jb51.net-private.pem')
#Signature = WriteRSA.sign_rsassa_pss(MsgDigest.digest())
Signature = Geekso.sign_rsassa_pss(MsgDigest.digest())
print "簽名的串是:"
print Signature.encode('base64')
#使用私鑰證書解密開始
ReadRSA = M2Crypto.RSA.load_key ('jb51.net-private.pem')
try:
PlainText = ReadRSA.private_decrypt (CipherText, M2Crypto.RSA.pkcs1_oaep_padding)
except:
print "解密錯誤"
PlainText = ""
if PlainText :
print "解密出來的串是:"
print PlainText
# 驗證加密串的簽名
MsgDigest = M2Crypto.EVP.MessageDigest('sha1')
MsgDigest.update(CipherText)
#提示,如果是用私鑰簽名的那就用公鑰驗證
新聞熱點
疑難解答