python密碼學(xué)對(duì)稱和非對(duì)稱密碼教程
在本章中,我們將詳細(xì)討論對(duì)稱和非對(duì)稱密碼術(shù).
對(duì)稱密碼術(shù)
在此類型中,加密和解密進(jìn)程使用相同的密鑰.它也被稱為秘密密鑰加密.對(duì)稱加密的主要特征如下:
- 它更簡(jiǎn)單,更快.
- 雙方以安全的方式交換密鑰.
缺點(diǎn)
對(duì)稱密碼術(shù)的主要缺點(diǎn)是如果密鑰泄漏給入侵者,則可以輕松更改消息,這被視為風(fēng)險(xiǎn)因素.
數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)
最流行的對(duì)稱密鑰算法是數(shù)據(jù)加密標(biāo)準(zhǔn)(DES),Python包含一個(gè)包含DES算法背后的邏輯的包.
安裝
在Python中安裝DES包 pyDES 的命令是 :
pip install pyDES
DES算法的簡(jiǎn)單程序?qū)崿F(xiàn)如下<
import?pyDes data?=?"DES?Algorithm?Implementation" k?=?pyDes.des("DESCRYPT",?pyDes.CBC,?"\0\0\0\0\0\0\0\0",?pad=None,?padmode=pyDes.PAD_PKCS5) d?=?k.encrypt(data) print?"Encrypted:?%r"?%?d print?"Decrypted:?%r"?%?k.decrypt(d) assert?k.decrypt(d)?==?data
它調(diào)用變量 padmode ,它根據(jù)DES算法實(shí)現(xiàn)提取所有包,并以指定的方式進(jìn)行加密和解密.
輸出
您可以看到以下輸出作為上面和下面給出的代碼的結(jié)果;
非對(duì)稱加密
它也被稱為公鑰加密.它以對(duì)稱加密的相反方式工作.這意味著它需要兩個(gè)密鑰:一個(gè)用于加密,另一個(gè)用于解密.公鑰用于加密,私鑰用于解密.
缺點(diǎn)
- 由于其密鑰長(zhǎng)度,它的加密速度較低.
- 密鑰管理至關(guān)重要.
以下Python中的程序代碼說明了使用RSA算法進(jìn)行非對(duì)稱加密的工作及其實(shí)現(xiàn) :
from?Crypto?import?Random from?Crypto.PublicKey?import?RSA import?base64 def?generate_keys(): ???#?key?length?must?be?a?multiple?of?256?and?>=?1024 ???modulus_length?=?256*4 ???privatekey?=?RSA.generate(modulus_length,?Random.new().read) ???publickey?=?privatekey.publickey() ???return?privatekey,?publickey def?encrypt_message(a_message?,?publickey): ???encrypted_msg?=?publickey.encrypt(a_message,?32)[0] ???encoded_encrypted_msg?=?base64.b64encode(encrypted_msg) ???return?encoded_encrypted_msg def?decrypt_message(encoded_encrypted_msg,?privatekey): ???decoded_encrypted_msg?=?base64.b64decode(encoded_encrypted_msg) ???decoded_decrypted_msg?=?privatekey.decrypt(decoded_encrypted_msg) ???return?decoded_decrypted_msg a_message?=?"This?is?the?illustration?of?RSA?algorithm?of?asymmetric?cryptography" privatekey?,?publickey?=?generate_keys() encrypted_msg?=?encrypt_message(a_message?,?publickey) decrypted_msg?=?decrypt_message(encrypted_msg,?privatekey) print?"%s?-?(%d)"?%?(privatekey.exportKey()?,?len(privatekey.exportKey())) print?"%s?-?(%d)"?%?(publickey.exportKey()?,?len(publickey.exportKey())) print?"?Original?content:?%s?-?(%d)"?%?(a_message,?len(a_message)) print?"Encrypted?message:?%s?-?(%d)"?%?(encrypted_msg,?len(encrypted_msg)) print?"Decrypted?message:?%s?-?(%d)"?%?(decrypted_msg,?len(decrypted_msg))
輸出
你可以找到執(zhí)行上面給出的代碼時(shí)減去輸出;
以上就是python密碼學(xué)對(duì)稱和非對(duì)稱密碼教程的詳細(xì)內(nèi)容,更多關(guān)于python對(duì)稱非對(duì)稱密碼學(xué)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PyCharm GUI界面開發(fā)和exe文件生成的實(shí)現(xiàn)
這篇文章主要介紹了PyCharm GUI界面開發(fā)和exe文件生成,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03caffe的python接口生成配置文件學(xué)習(xí)
這篇文章主要介紹了caffe的python接口生成配置文件學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集新型冠狀病毒數(shù)據(jù)實(shí)例
在本篇文章里小編給大家整理了關(guān)于Python實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集新型冠狀病毒數(shù)據(jù)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2020-02-02python利用beautifulSoup實(shí)現(xiàn)爬蟲
這篇文章主要介紹了python利用beautifulSoup實(shí)現(xiàn)爬蟲,需要的朋友可以參考下2014-09-09Python字符串字母大小寫轉(zhuǎn)換的各種情況詳析
在使用python語言開發(fā)中經(jīng)常會(huì)碰到,需要大寫轉(zhuǎn)小寫,小寫轉(zhuǎn)換大寫,甚至字符串中的單詞首字母大寫,以及字符串手字字母大寫的問題,下面這篇文章主要給大家介紹了關(guān)于Python字符串字母大小寫轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2022-05-05Python Pytorch深度學(xué)習(xí)之自動(dòng)微分
今天小編就為大家分享一篇關(guān)于Pytorch自動(dòng)微分的文章,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-10-10Django form表單與請(qǐng)求的生命周期步驟詳解
這篇文章主要介紹了Django-form表單與請(qǐng)求的生命周期,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06