【Python】PyCryptodome模块实现多种加密算法
PyCryptodome是python一個(gè)強(qiáng)大的加密算法庫,可以實(shí)現(xiàn)常見的單向加密、對稱加密、非對稱加密、非對稱加密算法簽名和流加密算法。
直接pip安裝即可:pip install pycryptodome
官網(wǎng)地址:https://pypi.org/project/pycryptodome/
一、base64編碼簡單介紹
原理:將要編碼的內(nèi)容按3字節(jié)為一組進(jìn)行分組,最后一組不夠3位的則補(bǔ)0(顯然最多補(bǔ)兩個(gè)0)
每組中每字節(jié)最高2位改成0不使用,原先各位的內(nèi)容保持原有順序往后移;最后在上一步中補(bǔ)了幾個(gè)0就加幾個(gè)等號以供解碼時(shí)按等號個(gè)數(shù)刪除0(經(jīng)此操作原先3節(jié)字就變成了只使用低6位的4字節(jié))
- 轉(zhuǎn)換前 10101101,10111010,01110110
- 轉(zhuǎn)換后 00101011, 00011011 ,00101001 ,00110110
用途:一是SMTP中要以BASE64形式傳輸二進(jìn)制文件,二是常用于將二進(jìn)制數(shù)據(jù)轉(zhuǎn)成可打印的ASCII碼字符進(jìn)行存儲(下文各加密算法的密鑰一般使用十六進(jìn)制字符串形式存儲,但也有以base64形式存儲)。
其他:本質(zhì)上講Base64只能算是一種編碼不能算是一種加密算法,PyCryptodome庫也不支持。但從”Base64讓人一下看不懂原本內(nèi)容是什么“的角度講你也不能說他完全不算加密,平時(shí)也經(jīng)常用,我們就順道講一講如何實(shí)現(xiàn)。
二、單向加密算法
別稱:單向加密算法,又稱哈希函數(shù)、散列函數(shù)、雜湊函數(shù)、摘要算法,英文名One-way encryption algorithm。
原理:單向加密如其名只能加密不能解密(彩虹表攻擊不是正經(jīng)的解密),不能解密的原因是本質(zhì)上并不是用IV(Initial Vector)去加密M輸出M的密文,而是用M去加密IV輸出IV的密文。
用途:消息認(rèn)證摘要、內(nèi)容或文檔的數(shù)字指紋、口令存儲。
其他:單向加密又可以分為hash和hmac兩大類,hmac和hash的算法是一樣的,其實(shí)可以認(rèn)為hmac就是hash加鹽的形式(不過這鹽值不是hash中常用的拼接在最前邊或拼接在最后邊,具體怎么拼接的我不太確定)。
一般來說標(biāo)準(zhǔn)庫就挺好用時(shí)我們一般就直接用標(biāo)準(zhǔn)庫,python的標(biāo)準(zhǔn)庫就能容易地實(shí)現(xiàn)單向加密算法,所以單向加密我們使用標(biāo)準(zhǔn)庫實(shí)現(xiàn)。
python中hash類算法使用hashlib庫實(shí)現(xiàn),hmac類算法使用hmac庫實(shí)現(xiàn)。
三、對稱加密算法
別名:對稱加密算法,又稱密鑰加密算法、單密鑰算法、共享密鑰算法,英文名Symmetric Encryption Algorithms。
原理:對稱加密算法最關(guān)鍵的就是SP變換,S變換通過代替操作實(shí)現(xiàn)混亂(即消除統(tǒng)計(jì)信息),P變換通過換位操作實(shí)現(xiàn)擴(kuò)散(即雪崩效應(yīng));加解密是使用同一個(gè)密鑰的逆操作過程。
用途:對稱加密可以還原內(nèi)容,且代替和換位操作運(yùn)算量不大,適用于大量內(nèi)容的加解密。對稱加密算法的缺點(diǎn)是加解密雙方密鑰分發(fā)困難。
其他:對稱加密算法有ECB、CBC、CFB、OFB、CTR等等多種模式,各種模式的加密是有些區(qū)別的,比如ECB不需要IV、CBC等則需要IV、EAX則需要nonce和tag等等,所以實(shí)現(xiàn)不同模式時(shí)寫法會有差別需要具體研究,不能完全照搬下邊的例子。
四、非對稱加密算法:
別稱:非對稱加密算法,又稱公鑰加密算法,英文名Asymmetric Cryptographic Algorithm。
原理:非對稱加密依賴與明文經(jīng)過與公鑰進(jìn)行數(shù)學(xué)運(yùn)算可得出密文,而密文經(jīng)過與密鑰進(jìn)行數(shù)學(xué)運(yùn)算又可得到明文。
用途:非對稱加密算法的優(yōu)點(diǎn)是密鑰分發(fā)簡單,但缺點(diǎn)也是很明顯的,其加解密過程依賴于數(shù)學(xué)運(yùn)算運(yùn)算量大所以加解密速度慢(另外同樣的密鑰強(qiáng)度其安全性弱于對稱加密算法),其只適用于少量內(nèi)容的加解密,最典型的就是https中用于完成對稱密鑰的交換。
五、非對稱加密算法簽名實(shí)現(xiàn)(以RSA為例)
我一直以為私鑰加密公鑰解密和公鑰加密私鑰解密沒什么兩樣,但首先一是和一個(gè)朋友說用私鑰加密發(fā)送回來時(shí)她疑或說私鑰可以加密嗎,然后回公司又和領(lǐng)導(dǎo)說私鑰加密公鑰解密的時(shí)候他直接說私鑰不能加密只能做簽名。
首先說私鑰加密公鑰解密在數(shù)學(xué)原理上是可行的,而且所謂的數(shù)字簽名其本質(zhì)就是我用你的公鑰可以解開這加密的內(nèi)容說明這些內(nèi)容就是你的,即數(shù)字簽名和簽名認(rèn)證本質(zhì)就是私鑰加密公鑰解密。
但另一方面,因?yàn)楣€是公開的所以私鑰加密并不能起加密通信的作用,所以一般沒有直接的私鑰加密公鑰解密的操作----但我不太明白為什么PyCryptodome這些庫在程序試圖使用私鑰加密時(shí)直接報(bào)錯(cuò)拒絕執(zhí)行(TypeError: This is not a private key),雖然沒什么用,私鑰加密也沒有什么危害吧?
六、流加密算法實(shí)現(xiàn)(以RC4為例)
別稱:流加密算法,又稱序列加密算法,英文名Stream cipher。
原理:流加密算法加密和解密也使用同一個(gè)密鑰,所以從咬文嚼字來說他也屬于對稱加密算法。流加密算法與前邊單向加密算法、對稱加密算法、非對稱加密算法的區(qū)別是前三者都是分組加密算法即一個(gè)分組使用同一個(gè)密鑰,而流加密算法每一位都使用不同的密鑰。
用途:流加密主要基于異或(xor)操作,運(yùn)算相對簡單,但安全性較低,沒有很多的使用場景,最典型的是WEP上的使用但也正由于其安全性問題導(dǎo)致WEP的淘汰。
參考:https://www.cnblogs.com/lsdb/p/10912518.html
總結(jié)
以上是生活随笔為你收集整理的【Python】PyCryptodome模块实现多种加密算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 目录555 权限_CMS网站安全
- 下一篇: 4天搞定Docker和k8s核心架构,稳