Python crypto包功能的使用解讀
在Python中,crypto相關(guān)的包通常用于加密、解密、哈希和其他密碼學(xué)操作。以下是幾個常見的與crypto相關(guān)的Python包及其作用:
1. 什么是“加密”???
加密就像把一封信放進一個帶鎖的盒子里,只有有鑰匙的人才能打開看。在計算機里,加密的作用是:
- ?保護隱私?:比如你的密碼、銀行卡號不能讓別人看到。
- ?防止篡改?:比如下載的文件不能被壞人偷偷修改。
- ?安全通信?:比如微信聊天內(nèi)容不會被黑客偷看。
Python 的 crypto 相關(guān)包就是用來做這些事情的!
?2. Python 常用的加密包?
??(1)cryptography(最推薦)??
?作用?:一個超級安全的工具箱,可以做各種加密操作。
?能干什么???
- ?加密/解密?:比如用密碼鎖住文件,只有知道密碼的人能打開。
- ?數(shù)字簽名?:比如你寫了一份合同,用你的“簽名”證明是你寫的,別人不能偽造。
- ?生成安全密碼?:比如自動生成一個超級復(fù)雜的密碼,黑客猜不到。
?示例?(加密一段文字):
from cryptography.fernet import Fernet # 生成一個鑰匙(必須保存好,丟了就打不開了?。? key = Fernet.generate_key() # 用鑰匙創(chuàng)建一個“鎖” cipher = Fernet(key) # 加密一段文字(比如"Hello") encrypted = cipher.encrypt(b"Hello") # 解密 decrypted = cipher.decrypt(encrypted) print(decrypted) # 輸出 b"Hello"
??(2)pycryptodome(功能強大)??
?作用?:比 cryptography 更底層,支持更多加密算法。
?能干什么???
- ?AES加密?(銀行級加密,比如支付寶用的就是這種)。
- ?RSA加密?(比如網(wǎng)站用 HTTPS 保護你的密碼)。
- ?計算文件的哈希值?(比如下載軟件時檢查文件是否被篡改)。
?示例?(用 AES 加密):
from Crypto.Cipher import AES # 鑰匙必須是16字節(jié)(比如 b'16-byte-key-12345') key = b'16-byte-key-12345' # 創(chuàng)建一個加密器 cipher = AES.new(key, AES.MODE_EAX) # 加密數(shù)據(jù) data = b"Secret Message" ciphertext, tag = cipher.encrypt_and_digest(data) # 解密 cipher = AES.new(key, AES.MODE_EAX, cipher.nonce) decrypted = cipher.decrypt_and_verify(ciphertext, tag) print(decrypted) # 輸出 b"Secret Message"
??(3)hashlib(Python 自帶,計算哈希)??
?作用?:計算“指紋”(哈希值),用來驗證數(shù)據(jù)是否被修改。
?能干什么???
- ?檢查密碼?:比如你注冊時輸入的密碼會被轉(zhuǎn)換成哈希值存儲,下次登錄時對比哈希值,而不是直接存密碼。
- ?驗證文件?:比如下載一個軟件,計算它的哈希值,確保沒被病毒修改。
?示例?(計算 SHA-256 哈希值):
import hashlib # 計算 "Hello" 的哈希值 hash_obj = hashlib.sha256(b"Hello") # 得到哈希值(一串固定長度的字母數(shù)字) print(hash_obj.hexdigest()) # 輸出:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
?注意?:哈希是單向的,不能反向解密(不像前面的加密可以解密)。
??(4)bcrypt(專門存密碼)??
?作用?:安全存儲用戶密碼,防止黑客破解。
?為什么不用普通哈希???
- 普通哈希(如 SHA-256)計算太快,黑客可以暴力.破解。
bcrypt會故意變慢,讓黑客破解更難。
?示例?(存儲和驗證密碼):
import bcrypt
# 1. 用戶注冊時,哈希密碼
password = b"my_password"
hashed = bcrypt.hashpw(password, bcrypt.gensalt()) # 加鹽(更安全)
# 2. 用戶登錄時,檢查密碼
input_password = b"my_password"
if bcrypt.checkpw(input_password, hashed):
print("密碼正確!")
else:
print("密碼錯誤!")?3. 什么時候用哪個包???
| ?你要做什么??? | ?用哪個包??? |
|---|---|
| 加密/解密數(shù)據(jù)(如文件) | cryptography 或 pycryptodome |
| 存儲用戶密碼 | bcrypt |
| 計算哈希值(如校驗文件) | hashlib |
| 網(wǎng)絡(luò)加密(如 HTTPS) | ssl(Python 自帶) |
?4. 注意事項(超級重要!)??
- ?不要自己發(fā)明加密算法?!用現(xiàn)成的庫(如
cryptography),自己寫的很容易被破解。 - ?密鑰(密碼)要保管好?!如果別人拿到你的密鑰,就能解密你的數(shù)據(jù)。
- ?不要用 MD5/SHA-1?!它們已經(jīng)不安全了,推薦用
SHA-256或bcrypt。 - ?加密不是萬能的?!如果電腦有病毒,加密也可能被破解。
?5. 總結(jié)?
- ?加密? = 把數(shù)據(jù)變成亂碼,只有有鑰匙的人能還原。
- ?哈希? = 計算數(shù)據(jù)的“指紋”,用來驗證是否被修改。
- Python 的
crypto包(如cryptography、pycryptodome、hashlib)就是干這些事的! - ?存儲密碼用
bcrypt,加密數(shù)據(jù)用cryptography,計算哈希用hashlib。
1. ?cryptography
?作用?:一個現(xiàn)代、安全的密碼學(xué)庫,提供高級和低級接口。
?功能?:
- 對稱加密(如AES)
- 非對稱加密(如RSA、ECC)
- 哈希(如SHA-256)
- 數(shù)字簽名
- 密鑰生成與管理
?示例?:
from cryptography.fernet import Fernet key = Fernet.generate_key() cipher = Fernet(key) encrypted = cipher.encrypt(b"Hello, World!") decrypted = cipher.decrypt(encrypted)
2.?pycryptodome/pycryptodomex
?作用?:PyCrypto的替代品,支持廣泛的密碼學(xué)算法。
?功能?:
- 對稱加密(AES、DES、ChaCha20)
- 非對稱加密(RSA、DSA)
- 哈希(SHA、MD5)
- 隨機數(shù)生成
- 數(shù)字簽名
?示例?:
from Crypto.Cipher import AES key = b'16-byte-key-12345' cipher = AES.new(key, AES.MODE_EAX) data = b"Secret message" ciphertext, tag = cipher.encrypt_and_digest(data)
3. ?hashlib(Python標(biāo)準(zhǔn)庫)?
?作用?:提供常見的哈希算法(如SHA-1、SHA-256、MD5)。
?示例?:
import hashlib hash_obj = hashlib.sha256(b"Hello") print(hash_obj.hexdigest())
4. ?ssl(Python標(biāo)準(zhǔn)庫)?
?作用?:用于TLS/SSL加密通信(如HTTPS)。
?功能?:
- 證書驗證
- 安全套接字通信
?示例?:
import ssl context = ssl.create_default_context()
5.bcrypt
?作用?:專為密碼哈希設(shè)計的庫(抗暴力.破解)。
?示例?:
import bcrypt password = b"super-secret" hashed = bcrypt.hashpw(password, bcrypt.gensalt())
6. ?paramiko(SSH相關(guān))?
?作用?:實現(xiàn)SSH協(xié)議,用于加密的遠程連接。
?功能?:
- SSH客戶端/服務(wù)器
- SFTP文件傳輸
注意事項
- ?安全性?:避免使用已棄用的庫(如
pycrypto),優(yōu)先選擇cryptography或pycryptodome。 - ?哈希算法?:MD5和SHA-1已不安全,推薦SHA-256或bcrypt。
- ?密鑰管理?:密鑰應(yīng)通過安全方式(如環(huán)境變量)存儲,而非硬編碼。
總結(jié)
- ?通用加密?:
cryptography或pycryptodome。 - ?密碼哈希?:
bcrypt或argon2。 - ?簡單哈希?:
hashlib。 - ?網(wǎng)絡(luò)加密?:
ssl或paramiko。
根據(jù)需求選擇合適的工具,并始終遵循最佳安全實踐!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 解決selenium 中的 .clear()方法失效問題
這篇文章主要介紹了python 解決selenium 中的 .clear()方法失效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
解決pycharm編輯區(qū)顯示yaml文件層級結(jié)構(gòu)遇中文亂碼問題
這篇文章主要介紹了解決pycharm編輯區(qū)顯示yaml文件層級結(jié)構(gòu)遇中文亂碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python如何通過Flask-Mail發(fā)送電子郵件
這篇文章主要介紹了Python如何通過Flask-Mail發(fā)送電子郵件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
python完成FizzBuzzWhizz問題(拉勾網(wǎng)面試題)示例
這篇文章主要介紹了python完成FizzBuzzWhizz問題(拉勾網(wǎng)面試題)示例,需要的朋友可以參考下2014-05-05
Python實現(xiàn)自動記錄復(fù)制的文本并保存
這篇文章主要為大家詳細介紹了如何使用Python開發(fā)一個小工具,可以實現(xiàn)記錄你復(fù)制的文本內(nèi)容并自動保存,這樣就再也不怕搞丟靈感或者代碼段啦2025-04-04
Python實現(xiàn)批量繪制遙感影像數(shù)據(jù)的直方圖
這篇文章主要為大家詳細介紹了如何基于Python中g(shù)dal模塊,實現(xiàn)對大量柵格圖像批量繪制直方圖,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-02-02

