本章是 前一章 的延续,我们使用RSA算法逐步实现加密,并详细讨论它.
用于解密密文的函数是as跟随 :
def?decrypt(ciphertext,?priv_key): ???cipher?=?PKCS1_OAEP.new(priv_key) ???return?cipher.decrypt(ciphertext)
对于公钥加密或非对称密钥加密,重要的是要保持两个重要的功能,即身份验证和授权.
授权
授权是确认发件人是唯一发送邮件的人的过程.以下代码解释了这个 :
def?sign(message,?priv_key,?hashAlg="SHA-256"): ???global?hash ???hash?=?hashAlg ???signer?=?PKCS1_v1_5.new(priv_key) ??? ???if?(hash?==?"SHA-512"): ??????digest?=?SHA512.new() ???elif?(hash?==?"SHA-384"): ??????digest?=?SHA384.new() ???elif?(hash?==?"SHA-256"): ??????digest?=?SHA256.new() ???elif?(hash?==?"SHA-1"): ??????digest?=?SHA.new() ???else: ??????digest?=?MD5.new() ???digest.update(message) ???return?signer.sign(digest)
身份验证
身份验证可以通过验证方法解释,如下所示去;
def?verify(message,?signature,?pub_key): ???signer?=?PKCS1_v1_5.new(pub_key) ???if?(hash?==?"SHA-512"): ??????digest?=?SHA512.new() ???elif?(hash?==?"SHA-384"): ??????digest?=?SHA384.new() ???elif?(hash?==?"SHA-256"): ??????digest?=?SHA256.new() ???elif?(hash?==?"SHA-1"): ??????digest?=?SHA.new() ???else: ??????digest?=?MD5.new() ???digest.update(message) ???return?signer.verify(digest,?signature)
验证数字签名以及发件人和收件人的详细信息.为安全起见,这会增加更多的权重年龄.
RSA密码解密
您可以使用以下代码进行RSA密码解密 :
from?Crypto.PublicKey?import?RSA from?Crypto.Cipher?import?PKCS1_OAEP from?Crypto.Signature?import?PKCS1_v1_5 from?Crypto.Hash?import?SHA512,?SHA384,?SHA256,?SHA,?MD5 from?Crypto?import?Random from?base64?import?b64encode,?b64decode hash?=?"SHA-256" def?newkeys(keysize): ???random_generator?=?Random.new().read ???key?=?RSA.generate(keysize,?random_generator) ???private,?public?=?key,?key.publickey() ???return?public,?private def?importKey(externKey): ???return?RSA.importKey(externKey) def?getpublickey(priv_key): ???return?priv_key.publickey() def?encrypt(message,?pub_key): ???cipher?=?PKCS1_OAEP.new(pub_key) ???return?cipher.encrypt(message) def?decrypt(ciphertext,?priv_key): ???cipher?=?PKCS1_OAEP.new(priv_key) ???return?cipher.decrypt(ciphertext) def?sign(message,?priv_key,?hashAlg?=?"SHA-256"): ???global?hash ???hash?=?hashAlg ???signer?=?PKCS1_v1_5.new(priv_key) ??? ???if?(hash?==?"SHA-512"): ??????digest?=?SHA512.new() ???elif?(hash?==?"SHA-384"): ??????digest?=?SHA384.new() ???elif?(hash?==?"SHA-256"): ??????digest?=?SHA256.new() ???elif?(hash?==?"SHA-1"): ??????digest?=?SHA.new() ???else: ??????digest?=?MD5.new() ???digest.update(message) ???return?signer.sign(digest) def?verify(message,?signature,?pub_key): ???signer?=?PKCS1_v1_5.new(pub_key) ???if?(hash?==?"SHA-512"): ??????digest?=?SHA512.new() ???elif?(hash?==?"SHA-384"): ??????digest?=?SHA384.new() ???elif?(hash?==?"SHA-256"): ??????digest?=?SHA256.new() ???elif?(hash?==?"SHA-1"): ??????digest?=?SHA.new() ???else: ??????digest?=?MD5.new() ???digest.update(message) ???return?signer.verify(digest,?signature)
以上就是python密码学RSA密码解密教程的详细内容,更多关于python密码学RSA解密的资料请关注其它相关文章!
查看更多关于python密码学RSA密码解密教程的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did17037