Python如何加密解密?感興趣的小伙伴可以舉一下腳,我看看有多少。咳咳咳,正式開始了,今天給大家分享的是Python如何加密解密,感興趣的小伙伴要認真學起來。 前言 加密演算法主要分為:哈希演算法、對稱加密演算法、非對稱加密演算法。 •哈希演算法:MD5、SHA256 •對稱加密演算法:DES、AES、CBC ...
Python如何加密解密?感興趣的小伙伴可以舉一下腳,我看看有多少。咳咳咳,正式開始了,今天給大家分享的是Python如何加密解密,感興趣的小伙伴要認真學起來。
前言
加密演算法主要分為:哈希演算法、對稱加密演算法、非對稱加密演算法。
•哈希演算法:MD5、SHA256
•對稱加密演算法:DES、AES、CBC
•非對稱加密演算法:RSA
此外,還有一種編碼演算法,叫Base64(註意它不是加密演算法),也是用的比較多的。
一、哈希演算法
哈希是一種加密演算法,也稱為散列函數或雜湊函數。哈希函數是一個公共函數,可以將任意長度的消息M映射成為一個長度較短且長度固定的值H(M),稱H(M)為哈希值、散列值(Hash Value)、雜湊值或者消息摘要。它是一種單向密碼體制,即一個從明文到密文的不可逆映射,只有加密過程,沒有解密過程。
特點:
•易壓縮:對於任意大小的輸入X,Hash值的長度很小,在實際應用中,函數H產生的Hash值其長度是固定的。
•易計算:對於任意給定的消息,計算其Hash值比較容易。
•單向性:對於給定的Hash值,要找到使得在計算上是不可行的,即求Hash的逆很困難。在給定某個哈希函數H和哈希值H(M)的情況下,得到M在計算上是不可行的,即從哈希輸出無法倒推輸入的原始數值。這是哈希函數安全性的基礎。
MD5加密
###Python學習交流Q群:906715085### import hashlib def get_md5_data(inStr:str): """ :param inStr: 待加密字元串 :return: 加密結果 """ md5 = hashlib.md5() #實例化對象 md5.update(inStr.encode('utf-8')) #使用update方法加密 return md5.hexdigest() #調用hexdigest方法獲取加密結果 if __name__ == '__main__': print(get_md5_data('asfa')) #輸出結果 #9fa16ee8683740b1883e5844d8c288ac
SHA256加密
import hashlib def get_sha256_data(inStr:str): """ :param inStr: 待加密字元串 :return: 加密結果 """ sha256 = hashlib.sha256() #實例化對象 sha256.update(inStr.encode('utf-8')) #使用update方法加密 return sha256.hexdigest() #調用hexdigest方法獲取加密結果 if __name__ == '__main__': print(get_sha256_data('asfa')) #輸出結果 #aaf01ca9bbd8ca8cc1703f99e62c71b56e4d01489803bf5e97bbcec646504e52
二、對稱加密演算法
雙方使用的同一個密鑰,既可以加密又可以解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
優點:
•速度快,對稱性加密通常在消息發送方需要加密大量數據時使用,演算法公開、計算量小、加密速度快、加密效率高。
缺點:
•在數據傳送前,發送和接收方必須商定好秘鑰,然後使雙方都能保存好秘鑰。其次如果一方的秘鑰被泄露,那麼加密信息也就不安全了。另外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的唯一秘鑰,這使得收、發雙方 所擁有的鑰匙數量巨大,秘鑰管理成為雙方的負擔。
ECB
from Crypto.Cipher import AES password = b'1234567812345678' #秘鑰,b就是表示為bytes類型 text = b'abcdefghijklmnhi' #需要加密的內容,bytes類型 aes = AES.new(password,AES.MODE_ECB) #創建一個aes對象 #AES.MODE_ECB 表示模式是ECB模式 en_text = aes.encrypt(text) #加密明文 print("密文:",en_text) #加密明文,bytes類型 den_text = aes.decrypt(en_text) # 解密密文 print("明文:",den_text) #密文:b'WU\xe0\x0e\xa3\x87\x12\x95\\]O\xd7\xe3\xd4 )' #明文:b'abcdefghijklmnhi'
CBC
from Crypto.Cipher import AES #password = b'1234567812345678' #秘鑰,b就是表示為bytes類型 #iv = b'1234567812345678' # iv偏移量,bytes類型 #text = b'abcdefghijklmnhi' #需要加密的內容,bytes類型 #aes = AES.new(password,AES.MODE_CBC,iv) #創建一個aes對象# # AES.MODE_CBC 表示模式是CBC模式 # en_text = aes.encrypt(text) # print("密文:",en_text) #加密明文,bytes類型 # aes = AES.new(password,AES.MODE_CBC,iv) #CBC模式下解密需要重新創建一個aes對象 # den_text = aes.decrypt(en_text) # print("明文:",den_text)# # 密文:b'\x93\x8bN!\xe7~>\xb0M\xba\x91\xab74;0' # 明文:b'abcdefghijklmnhi'
三、非對稱加密演算法
一對秘鑰由公鑰和私鑰組成(可以使用很多對密鑰)。
私鑰解密公鑰加密數據,公鑰解密私鑰加密數據(私鑰公鑰可以互相加密解密)
優點:
•安全
缺點:
•速度較慢
代表:
•RSA、Elgamal、背包演算法、Rabin、Diffie-Hellman、ECC(橢圓曲線加密演算法)。
•使用廣泛的是RAS演算法,Elgamal其次。
import rsa str = 'asfa' (pubkey,privkey) = rsa.newkeys(1024) #實例化對象 pwd = rsa.encrypt(str.encode('utf-8'),pubkey) #公鑰加密 print("加密結果===》",pwd.hex())depwd = rsa.decrypt(pwd,privkey)#私鑰解密 print("解密結果===》", depwd.decode()) #加密結果===》 6bc0709e403e3e443a97e267929c6f1154c0b5b74a8b7320d89285d626498ba47e394cbdd8ee2c06f7dfac17291c5af317b5d7f7a2bf3e7691a9a6639c06a7957877ebec8eeece2c771b6a1ac3cc079da485acd5682ed8f090b3eb935ae637cd8fab92e656e4b6d8d312b409a141af8ecbc0b972ada068fe116343c57eb487fe # 解密結果===》 asfa
雙重加密–公鑰加密,私鑰解密,私鑰簽名,公鑰驗簽
四、Base64編碼
Base64是編碼技術而不是加密技術。可以將任意的位元組數組數據,通過演算法,聲稱只有(大小寫英文、數字、+、/)(一共64個字元)內容表示的字元串數據。即將任意的內容轉換為可見的字元串形式。提供解碼功能。
import base64 str = 'asfa' ba64 = base64.b64encode(str.encode('UTF-8')) #編碼 print("編碼結果====》",ba64) reba64 = base64.b64decode(ba64) #調用hexdigest方法獲取加密結果 print("解碼位元組結果====》",reba64) print("解碼結果====》",reba64.decode('utf-8')) #編碼結果====》 b'YXNmYQ==' #解碼位元組結果====》b'asfa' #解碼結果====》 asfa
最後
這個小技巧大家都掌握了嗎?掌握的記得點贊,沒掌握的記得點贊收藏,這一章到這裡就結束了,想看什麼可以告訴我。看這密密麻麻的代碼,必須來一個大大的贊。