python有证书的加密解密实现方法,python写加密解密

来源:未知 浏览 177次 时间 2021-06-11 00:23

最近在做python的加解密工作同时加完密的串能在php上能解出来网上也找了一些靠谱的资料深圳seo外包服务网上也找了一些靠谱的资料刚好也有时间我就总结了一下python在加密与解密这块的代码今后可能还能用的上。相对于php而言python这块加解密组件较多的分别是:

python-crypto – 这个组件是基本组件使用的函式相对比较复杂。
ezPyCrypto – 相对简单但他作出来的公私钥无法与其他程序相兼容 SSLCrypto – 与 ezPyCrypto 是相同一个作者开发效率上要比ezPyCrypto 好。但一样不能与其它程序相兼容。
pyopenssl – 似乎是用在https 通讯上的而我找不到加解密的用法。
M2Crypto – 终于让我找到了但它有一大缺点它底层是用 SWIG 与 OpenSSL 交接的。
在Windows安装SWIG 程序是非常难的。

python有证书的加密解密实现方法

一、 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)
#提示如果是用私钥签名的那就用公钥验证
#VerifyRSA = M2Crypto.RSA.load_pub_key(‘Alice-public.pem’)
#VerifyRSA.verify_rsassa_pss(MsgDigest.digest(), Signature)
if Geekso.verify_rsassa_pss(MsgDigest.digest(), Signature) == 1:
print “签名正确”
else:
print “签名不正确”

python有证书的加密解密实现方法

3.给证书加上密码

给证书加密码的好处是即使证书被人拿了没有密码也用不了。
代码如下:def passphrase(v):
return ‘4567890’
生成证书时用
代码如下:Geekso.save_key(‘jb51.net-private.pem’,callback=passphrase)
使用证书时用
代码如下:ReadRSA = RSA.load_key (‘jb51.net-private.pem’, passphrase)
二、 X509标准方式生成的证书

标签: printkey签名证书