Python常見的幾種數(shù)據(jù)加密方式
前言:
常見的加密算法基本分為這幾類:
- 線性散列算法(簽名算法)MD5,sha1
- 對稱性加密算法 AES DES
- 非對稱性加密算法 RSA
一、md5加密
MD5是一種被廣泛使用的線性散列算法,可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整的一致性。且MD5加密之后產(chǎn)生的是一個固定長度(32位或16位)的數(shù)據(jù)。
解密
常規(guī)講MD5是不存在解密的。但是理論上MD5是可以進(jìn)行反向暴力破解的。暴力破解的大致原理就是用很多不同的數(shù)據(jù)進(jìn)行加密后跟已有的加密數(shù)據(jù)進(jìn)行對比,由此來尋找規(guī)律。理論上只要數(shù)據(jù)量足夠龐大MD5是可以被破解的。但是要注意,破解MD5是需要考慮破解的成本(時間和機(jī)器性能)。假設(shè)破解當(dāng)前的MD5密碼需要目前計(jì)算能力最優(yōu)秀的計(jì)算機(jī)工作100年才能破解完成。那么當(dāng)前的MD5密碼就是安全的。
增加破解成本的方法
使用一段無意義且隨機(jī)的私匙進(jìn)行MD5加密會生成一個加密串,我們暫且稱之為串1
將要加密的的數(shù)據(jù)跟串1拼接,再進(jìn)行一次MD5,這時會生成串2
將串2再次進(jìn)行MD5加密,這時生成的串3就是我們加密后的數(shù)據(jù)。
我們在注冊賬號時的密碼一般都是用的MD5加密:
import hashlibh = hashlib.md5() str = 'boboadmin' h.update(str.encode()) msg = h.hexdigest() print(msg)
SHA1安全哈希算法
SHA1比MD5的安全性更強(qiáng),但也比MD5慢
import hashlib sha1 = hashlib.sha1() data = '2333333' sha1.update(data.encode('utf-8')) sha1_data = sha1.hexdigest() print(sha1_data)
二、Base64偽加密
Base64是一種用64個字符來表示任意二進(jìn)制數(shù)據(jù)的方法。base64是一種編碼方式而不是加密算法。只是看上去像是加密而已。
Base64使用A–Z,a–z,0–9,+,/ 這64個字符實(shí)現(xiàn)對數(shù)據(jù)進(jìn)行加密。
import base64 str='admin' str=str.encode('utf-8') #加密 bs64=base64.b64encode(str) print(bs64) #解密 debs64=base64.b64decode(bs64) print(debs64.decode())
三、DES/AES
DES全稱為Data Encryption Standard,即數(shù)據(jù)加密標(biāo)準(zhǔn),是一種使用密鑰加密的算法。該加密算法是一種對稱加密方式,其加密運(yùn)算、解密運(yùn)算需要使用的是同樣的密鑰(一組字符串)即可。
注意:
現(xiàn)在用AES這個標(biāo)準(zhǔn)來替代原先的DES。
AES和DES的區(qū)別
加密后密文長度的不同:
- DES加密后密文長度是8的整數(shù)倍
- AES加密后密文長度是16的整數(shù)倍
應(yīng)用場景的不同:
- 企業(yè)級開發(fā)使用DES足夠安全
- 如果要求高使用AES
- 使用DES/AES進(jìn)行數(shù)據(jù)交互時要求雙方都擁有相同的私匙
破解方法
- 暴力破解
- DES如果使用 56 位的密鑰,則可能的密鑰數(shù)量是 2 的 56 次方個。只要計(jì)算足夠強(qiáng)大是可以被破解的
#需要下載安裝pyDes模塊 import binascii from pyDes import des, CBC, PAD_PKCS5 def des_encrypt(secret_key,s): ? ? iv = secret_key ? ? k = des(secret_key,CBC,iv,pad=None,padmode=PAD_PKCS5) ? ? en = k.encrypt(s,padmode=PAD_PKCS5) ? ? return binascii.b2a_hex(en) def des_decrypt(secret_key, s): ? ? iv = secret_key ? ? k = des(secret_key,CBC,iv,pad = None,padmode = PAD_PKCS5) ? ? de = k.decrypt(binascii.a2b_hex(s),padmode = PAD_PKCS5) ? ? return desecret_str = des_encrypt('12345678', 'I love YOU~') print(secret_str) clear_str = des_decrypt('12345678', secret_str) print(clear_str)
四、RSA
RSA加密:
RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業(yè)中RSA被廣泛使用。
非對稱加密算法
非對稱加密算法需要兩個密鑰:
- 公開密鑰(publickey:簡稱公鑰)
- 私有密鑰(privatekey:簡稱私鑰)
- 公鑰與私鑰是一對,如果用公鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€不同的密鑰,所以這種算法叫作非對稱加密算法。
注意:
- 使用時都是使用公匙加密使用私匙解密。公匙可以公開,私匙自己保留。
- 算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒有對稱加密解密的速度快。
使用流程和場景介紹
- 通過公匙加密,使用私匙解密。私匙是通過公匙計(jì)算生成的。假設(shè)ABC三方之間相互要進(jìn)行加密通信。大家相互之間使用公匙進(jìn)行信息加密,信息讀取時使用各自對應(yīng)的私匙進(jìn)行信息解密
- 用戶輸入的支付密碼會通過RSA加密
公鑰私鑰生成方式
公私匙可以在線生成:
[http://web.chacuo.net/netrsakeypair]
import rsa def rsaEncrypt(str): ? ? (pubkey,privkey)=rsa.newkeys(512) ? ? print("pub:",pubkey) ? ? print("priv:",privkey) ? ? content =str.encode('utf-8') ? ? crypto=rsa.encrypt(content,pubkey) ? ? return (crypto,privkey) def rsaDecrypt(str,pk): ? ? content = rsa.decrypt(str,pk) ? ? con=content.decode('utf-8') ? ? return con (deData,privKey)=rsaEncrypt("hello") print('加密后的密文',deData) content = rsaDecrypt(deData,privKey) print(content)
到此這篇關(guān)于Python常見的幾種數(shù)據(jù)加密方式的文章就介紹到這了,更多相關(guān)Python 數(shù)據(jù)加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python集合魔法解鎖數(shù)據(jù)去重技巧應(yīng)用實(shí)例
這篇文章主要為大家介紹了Python集合魔法解鎖數(shù)據(jù)去重技巧應(yīng)用實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11python實(shí)現(xiàn)opencv+scoket網(wǎng)絡(luò)實(shí)時圖傳
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)opencv+scoket網(wǎng)絡(luò)實(shí)時圖傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03使用keras實(shí)現(xiàn)非線性回歸(兩種加激活函數(shù)的方式)
這篇文章主要介紹了使用keras實(shí)現(xiàn)非線性回歸(兩種加激活函數(shù)的方式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python利用裝飾器實(shí)現(xiàn)類似于flask路由
這篇文章主要為大家詳細(xì)介紹了Python如何利用裝飾器實(shí)現(xiàn)類似于flask路由,文中的示例代碼講解詳細(xì),對我們深入了解Python有一點(diǎn)的幫助,感興趣的可以了解一下2023-02-02python中Task封裝協(xié)程的知識點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家總結(jié)的是一篇關(guān)于python中Task封裝協(xié)程的知識點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-07-07Python的線程使用隊(duì)列Queue來改造轉(zhuǎn)賬場景
前篇我們了隊(duì)列Queue和轉(zhuǎn)賬場景這次趁熱學(xué)委展示一下使用隊(duì)列解決轉(zhuǎn)賬場景的問題,這篇文章主要介紹了Python的線程使用隊(duì)列來改造轉(zhuǎn)賬場景,需要的朋友可以參考一下2022-02-02python實(shí)現(xiàn)一個點(diǎn)繞另一個點(diǎn)旋轉(zhuǎn)后的坐標(biāo)
今天小編就為大家分享一篇python實(shí)現(xiàn)一個點(diǎn)繞另一個點(diǎn)旋轉(zhuǎn)后的坐標(biāo),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12