python密碼學(xué)RSA密碼解密教程
本章是前一章的延續(xù),我們使用RSA算法逐步實(shí)現(xiàn)加密,并詳細(xì)討論它.
用于解密密文的函數(shù)是as跟隨 :
def?decrypt(ciphertext,?priv_key): ???cipher?=?PKCS1_OAEP.new(priv_key) ???return?cipher.decrypt(ciphertext)
對于公鑰加密或非對稱密鑰加密,重要的是要保持兩個(gè)重要的功能,即身份驗(yàn)證和授權(quán).
授權(quán)
授權(quán)是確認(rèn)發(fā)件人是唯一發(fā)送郵件的人的過程.以下代碼解釋了這個(gè) :
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)
身份驗(yàn)證
身份驗(yàn)證可以通過驗(yàn)證方法解釋,如下所示去;
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)
驗(yàn)證數(shù)字簽名以及發(fā)件人和收件人的詳細(xì)信息.為安全起見,這會(huì)增加更多的權(quán)重年齡.
RSA密碼解密
您可以使用以下代碼進(jìn)行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密碼學(xué)RSA密碼解密教程的詳細(xì)內(nèi)容,更多關(guān)于python密碼學(xué)RSA解密的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
DataFrame 將某列數(shù)據(jù)轉(zhuǎn)為數(shù)組的方法
下面小編就為大家分享一篇DataFrame 將某列數(shù)據(jù)轉(zhuǎn)為數(shù)組的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04關(guān)于numpy中eye和identity的區(qū)別詳解
今天小編就為大家分享一篇關(guān)于numpy中eye和identity的區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11云原生Docker部署Django和mysql項(xiàng)目全過程
最近在學(xué)習(xí)用docker部署Django項(xiàng)目,經(jīng)過百折不撓的鼓搗,終于將項(xiàng)目部署成功,下面這篇文章主要給大家介紹了關(guān)于云原生Docker部署Django和mysql項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12python使用OS模塊操作系統(tǒng)接口及常用功能詳解
os是?Python?標(biāo)準(zhǔn)庫中的一個(gè)模塊,提供了與操作系統(tǒng)交互的功能,在本節(jié)中,我們將介紹os模塊的一些常用功能,并通過實(shí)例代碼詳細(xì)講解每個(gè)知識(shí)點(diǎn)2023-06-06pytorch 如何實(shí)現(xiàn)HWC轉(zhuǎn)CHW
這篇文章主要介紹了pytorch HWC轉(zhuǎn)CHW的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05