Python crypto包功能的使用解讀
在Python中,crypto相關(guān)的包通常用于加密、解密、哈希和其他密碼學(xué)操作。以下是幾個(gè)常見(jiàn)的與crypto相關(guān)的Python包及其作用:
1. 什么是“加密”???
加密就像把一封信放進(jìn)一個(gè)帶鎖的盒子里,只有有鑰匙的人才能打開(kāi)看。在計(jì)算機(jī)里,加密的作用是:
- ?保護(hù)隱私?:比如你的密碼、銀行卡號(hào)不能讓別人看到。
- ?防止篡改?:比如下載的文件不能被壞人偷偷修改。
- ?安全通信?:比如微信聊天內(nèi)容不會(huì)被黑客偷看。
Python 的 crypto 相關(guān)包就是用來(lái)做這些事情的!
?2. Python 常用的加密包?
??(1)cryptography(最推薦)??
?作用?:一個(gè)超級(jí)安全的工具箱,可以做各種加密操作。
?能干什么???
- ?加密/解密?:比如用密碼鎖住文件,只有知道密碼的人能打開(kāi)。
- ?數(shù)字簽名?:比如你寫了一份合同,用你的“簽名”證明是你寫的,別人不能偽造。
- ?生成安全密碼?:比如自動(dòng)生成一個(gè)超級(jí)復(fù)雜的密碼,黑客猜不到。
?示例?(加密一段文字):
from cryptography.fernet import Fernet # 生成一個(gè)鑰匙(必須保存好,丟了就打不開(kāi)了!) key = Fernet.generate_key() # 用鑰匙創(chuàng)建一個(gè)“鎖” cipher = Fernet(key) # 加密一段文字(比如"Hello") encrypted = cipher.encrypt(b"Hello") # 解密 decrypted = cipher.decrypt(encrypted) print(decrypted) # 輸出 b"Hello"
??(2)pycryptodome(功能強(qiáng)大)??
?作用?:比 cryptography 更底層,支持更多加密算法。
?能干什么???
- ?AES加密?(銀行級(jí)加密,比如支付寶用的就是這種)。
- ?RSA加密?(比如網(wǎng)站用 HTTPS 保護(hù)你的密碼)。
- ?計(jì)算文件的哈希值?(比如下載軟件時(shí)檢查文件是否被篡改)。
?示例?(用 AES 加密):
from Crypto.Cipher import AES # 鑰匙必須是16字節(jié)(比如 b'16-byte-key-12345') key = b'16-byte-key-12345' # 創(chuàng)建一個(gè)加密器 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 自帶,計(jì)算哈希)??
?作用?:計(jì)算“指紋”(哈希值),用來(lái)驗(yàn)證數(shù)據(jù)是否被修改。
?能干什么???
- ?檢查密碼?:比如你注冊(cè)時(shí)輸入的密碼會(huì)被轉(zhuǎn)換成哈希值存儲(chǔ),下次登錄時(shí)對(duì)比哈希值,而不是直接存密碼。
- ?驗(yàn)證文件?:比如下載一個(gè)軟件,計(jì)算它的哈希值,確保沒(méi)被病毒修改。
?示例?(計(jì)算 SHA-256 哈希值):
import hashlib # 計(jì)算 "Hello" 的哈希值 hash_obj = hashlib.sha256(b"Hello") # 得到哈希值(一串固定長(zhǎng)度的字母數(shù)字) print(hash_obj.hexdigest()) # 輸出:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
?注意?:哈希是單向的,不能反向解密(不像前面的加密可以解密)。
??(4)bcrypt(專門存密碼)??
?作用?:安全存儲(chǔ)用戶密碼,防止黑客破解。
?為什么不用普通哈希???
- 普通哈希(如 SHA-256)計(jì)算太快,黑客可以暴力.破解。
bcrypt會(huì)故意變慢,讓黑客破解更難。
?示例?(存儲(chǔ)和驗(yàn)證密碼):
import bcrypt
# 1. 用戶注冊(cè)時(shí),哈希密碼
password = b"my_password"
hashed = bcrypt.hashpw(password, bcrypt.gensalt()) # 加鹽(更安全)
# 2. 用戶登錄時(shí),檢查密碼
input_password = b"my_password"
if bcrypt.checkpw(input_password, hashed):
print("密碼正確!")
else:
print("密碼錯(cuò)誤!")?3. 什么時(shí)候用哪個(gè)包???
| ?你要做什么??? | ?用哪個(gè)包??? |
|---|---|
| 加密/解密數(shù)據(jù)(如文件) | cryptography 或 pycryptodome |
| 存儲(chǔ)用戶密碼 | bcrypt |
| 計(jì)算哈希值(如校驗(yàn)文件) | hashlib |
| 網(wǎng)絡(luò)加密(如 HTTPS) | ssl(Python 自帶) |
?4. 注意事項(xiàng)(超級(jí)重要?。??
- ?不要自己發(fā)明加密算法?!用現(xiàn)成的庫(kù)(如
cryptography),自己寫的很容易被破解。 - ?密鑰(密碼)要保管好?!如果別人拿到你的密鑰,就能解密你的數(shù)據(jù)。
- ?不要用 MD5/SHA-1?!它們已經(jīng)不安全了,推薦用
SHA-256或bcrypt。 - ?加密不是萬(wàn)能的?!如果電腦有病毒,加密也可能被破解。
?5. 總結(jié)?
- ?加密? = 把數(shù)據(jù)變成亂碼,只有有鑰匙的人能還原。
- ?哈希? = 計(jì)算數(shù)據(jù)的“指紋”,用來(lái)驗(yàn)證是否被修改。
- Python 的
crypto包(如cryptography、pycryptodome、hashlib)就是干這些事的! - ?存儲(chǔ)密碼用
bcrypt,加密數(shù)據(jù)用cryptography,計(jì)算哈希用hashlib。
1. ?cryptography
?作用?:一個(gè)現(xiàn)代、安全的密碼學(xué)庫(kù),提供高級(jí)和低級(jí)接口。
?功能?:
- 對(duì)稱加密(如AES)
- 非對(duì)稱加密(如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é)算法。
?功能?:
- 對(duì)稱加密(AES、DES、ChaCha20)
- 非對(duì)稱加密(RSA、DSA)
- 哈希(SHA、MD5)
- 隨機(jī)數(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)庫(kù))?
?作用?:提供常見(jià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)庫(kù))?
?作用?:用于TLS/SSL加密通信(如HTTPS)。
?功能?:
- 證書驗(yàn)證
- 安全套接字通信
?示例?:
import ssl context = ssl.create_default_context()
5.bcrypt
?作用?:專為密碼哈希設(shè)計(jì)的庫(kù)(抗暴力.破解)。
?示例?:
import bcrypt password = b"super-secret" hashed = bcrypt.hashpw(password, bcrypt.gensalt())
6. ?paramiko(SSH相關(guān))?
?作用?:實(shí)現(xiàn)SSH協(xié)議,用于加密的遠(yuǎn)程連接。
?功能?:
- SSH客戶端/服務(wù)器
- SFTP文件傳輸
注意事項(xiàng)
- ?安全性?:避免使用已棄用的庫(kù)(如
pycrypto),優(yōu)先選擇cryptography或pycryptodome。 - ?哈希算法?:MD5和SHA-1已不安全,推薦SHA-256或bcrypt。
- ?密鑰管理?:密鑰應(yīng)通過(guò)安全方式(如環(huán)境變量)存儲(chǔ),而非硬編碼。
總結(jié)
- ?通用加密?:
cryptography或pycryptodome。 - ?密碼哈希?:
bcrypt或argon2。 - ?簡(jiǎn)單哈希?:
hashlib。 - ?網(wǎng)絡(luò)加密?:
ssl或paramiko。
根據(jù)需求選擇合適的工具,并始終遵循最佳安全實(shí)踐!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python中cryptography庫(kù)的實(shí)現(xiàn)
- 深入理解Python密碼學(xué)之使用PyCrypto庫(kù)進(jìn)行加密和解密
- Python PyCryptodome庫(kù)介紹與實(shí)例教程
- 解決Python報(bào)錯(cuò)No module named Crypto問(wèn)題
- python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問(wèn)題
- Python中Cryptography庫(kù)實(shí)現(xiàn)加密解密
- Python?pycryptodome庫(kù)實(shí)現(xiàn)RSA加密解密消息
相關(guān)文章
一文教你學(xué)會(huì)使用Python中的多處理模塊
Python?多處理模塊是一個(gè)強(qiáng)大的工具,用于實(shí)現(xiàn)并行處理,提高程序的性能和效率,本文將詳細(xì)介紹?Python?中多處理模塊的使用方法,希望對(duì)大家有所幫助2024-01-01
python解決No?module?named?pip問(wèn)題兩種方法
當(dāng)出現(xiàn)No module named pip錯(cuò)誤時(shí),表明您的Python環(huán)境缺少pip模塊,下面這篇文章主要給大家介紹了關(guān)于python解決No?module?named?pip問(wèn)題的兩種方法,需要的朋友可以參考下2024-01-01
Python Pandas學(xué)習(xí)之?dāng)?shù)據(jù)離散化與合并詳解
Pandas是python的一個(gè)數(shù)據(jù)分析包,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。本文將通過(guò)示例詳細(xì)為大家介紹一下Pandas的數(shù)據(jù)離散化與合并,需要的可以參考一下2022-02-02
python 基于opencv實(shí)現(xiàn)圖像增強(qiáng)
這篇文章主要介紹了python 基于opencv實(shí)現(xiàn)圖像增強(qiáng)的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
Python傳統(tǒng)圖像處理之皮膚區(qū)域檢測(cè)詳解
這篇文章主要介紹了在不同情景下對(duì)傳統(tǒng)圖像進(jìn)行皮膚區(qū)域檢測(cè),文章中的代碼具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起來(lái)學(xué)習(xí)學(xué)習(xí)2021-12-12

