Python3非对称加密算法RSA实例详解
本文实例讲述了Python3非对称加密算法RSA。分享给大家供大家参考,具体如下:
python3可以使用Crypto.PublicKey.RSA和rsa生成公钥、私钥。
其中python3.6Crypto库的安装方式请参考前面一篇《Python3对称加密算法AES、DES3》
rsa加解密的库使用pip3installrsa就行了
C:\WINDOWS\system32>pip3installrsa
Collectingrsa
Downloadinghttps://files.pythonhosted.org/packages/e1/ae/baedc9cb175552e95f3395c43055a6a5e125ae4d48a1d7a924baca83e92e/rsa-3.4.2-py2.py3-none-any.whl(46kB)
100%|████████████████████████████████|51kB99kB/s
Collectingpyasn1>=0.1.3(fromrsa)
Downloadinghttps://files.pythonhosted.org/packages/a0/70/2c27740f08e477499ce19eefe05dbcae6f19fdc49e9e82ce4768be0643b9/pyasn1-0.4.3-py2.py3-none-any.whl(72kB)
100%|████████████████████████████████|81kB289kB/s
Installingcollectedpackages:pyasn1,rsa
Successfullyinstalledpyasn1-0.4.3rsa-3.4.2
使用Crypto.PublicKey.RSA生成公钥、私钥:
importCrypto.PublicKey.RSA importCrypto.Random x=Crypto.PublicKey.RSA.generate(2048) a=x.exportKey("PEM")#生成私钥 b=x.publickey().exportKey()#生成公钥 withopen("a.pem","wb")asx: x.write(a) withopen("b.pem","wb")asx: x.write(b) y=Crypto.PublicKey.RSA.generate(2048,Crypto.Random.new().read)#使用Crypto.Random.new().read伪随机数生成器 c=y.exportKey()#生成私钥 d=y.publickey().exportKey()#生成公钥 withopen("c.pem","wb")asx: x.write(c) withopen("d.pem","wb")asx: x.write(d)
使用Crypto.PublicKey.RSA.importKey(private_key)生成公钥和证书:
importCrypto.PublicKey.RSA withopen("a.pem","rb")asx: xx=Crypto.PublicKey.RSA.importKey(x.read()) b=xx.publickey().exportKey()#生成公钥 withopen("b.pem","wb")asx: x.write(b) a=xx.exportKey("DER")#生成DER格式的证书 withopen("a.der","wb")asx: x.write(a)
使用rsa生成公钥、私钥:
importrsa f,e=rsa.newkeys(2048)#生成公钥、私钥 e=e.save_pkcs1()#保存为.pem格式 withopen("e.pem","wb")asx:#保存私钥 x.write(e) f=f.save_pkcs1()#保存为.pem格式 withopen("f.pem","wb")asx:#保存公钥 x.write(f)
RSA非对称加密算法实现:
使用Crypto模块:
importCrypto.PublicKey.RSA importCrypto.Cipher.PKCS1_v1_5 importCrypto.Random importCrypto.Signature.PKCS1_v1_5 importCrypto.Hash y=b"abcdefg1234567" withopen("b.pem","rb")asx: b=x.read() cipher_public=Crypto.Cipher.PKCS1_v1_5.new(Crypto.PublicKey.RSA.importKey(b)) cipher_text=cipher_public.encrypt(y)#使用公钥进行加密 withopen("a.pem","rb")asx: a=x.read() cipher_private=Crypto.Cipher.PKCS1_v1_5.new(Crypto.PublicKey.RSA.importKey(a)) text=cipher_private.decrypt(cipher_text,Crypto.Random.new().read)#使用私钥进行解密 asserttext==y#断言验证 withopen("c.pem","rb")asx: c=x.read() c_rsa=Crypto.PublicKey.RSA.importKey(c) signer=Crypto.Signature.PKCS1_v1_5.new(c_rsa) msg_hash=Crypto.Hash.SHA256.new() msg_hash.update(y) sign=signer.sign(msg_hash)#使用私钥进行'sha256'签名 withopen("d.pem","rb")asx: d=x.read() d_rsa=Crypto.PublicKey.RSA.importKey(d) verifer=Crypto.Signature.PKCS1_v1_5.new(d_rsa) msg_hash=Crypto.Hash.SHA256.new() msg_hash.update(y) verify=verifer.verify(msg_hash,sign)#使用公钥验证签名 print(verify)
运行结果:
True
使用rsa模块:
importrsa y=b"abcdefg1234567" withopen("e.pem","rb")asx: e=x.read() e=rsa.PrivateKey.load_pkcs1(e)#load私钥 withopen("f.pem","rb")asx: f=x.read() f=rsa.PublicKey.load_pkcs1(f)#load公钥,由于之前生成的私钥缺少'RSA'字段,故无法load cipher_text=rsa.encrypt(y,f)#使用公钥加密 text=rsa.decrypt(cipher_text,e)#使用私钥解密 asserttext==y#断言验证 sign=rsa.sign(y,e,"SHA-256")#使用私钥进行'sha256'签名 verify=rsa.verify(y,sign,f)#使用公钥验证签名 print(verify)
运行结果:
True
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
在线RSA加密/解密工具:
http://tools.jb51.net/password/rsa_encode
文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password
在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。