Python PyCryptodome庫(kù)介紹與實(shí)例教程
PyCryptodome是一個(gè)強(qiáng)大的Python加密庫(kù),提供了各種加密算法和工具。本文將介紹PyCryptodome的基本概念和常見(jiàn)使用場(chǎng)景,并通過(guò)示例代碼展示如何使用該庫(kù)。
1. 安裝
首先,我們需要安裝PyCryptodome庫(kù):
pip install pycryptodome
2. 基本概念
PyCryptodome提供了以下幾種主要類(lèi)型的加密算法:
- 對(duì)稱(chēng)加密: AES, DES, 3DES等
- 非對(duì)稱(chēng)加密: RSA, DSA, ECC等
- 哈希函數(shù): SHA256, MD5等
- 消息認(rèn)證碼(MAC): HMAC
- 數(shù)字簽名
3. 使用場(chǎng)景和示例代碼
3.1 對(duì)稱(chēng)加密 - AES
AES (Advanced Encryption Standard) 是一種廣泛使用的對(duì)稱(chēng)加密算法。以下是使用AES加密和解密的示例:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
def encrypt_aes(plaintext, key):
cipher = AES.new(key, AES.MODE_ECB)
padded_data = pad(plaintext.encode(), AES.block_size)
return cipher.encrypt(padded_data)
def decrypt_aes(ciphertext, key):
cipher = AES.new(key, AES.MODE_ECB)
padded_data = cipher.decrypt(ciphertext)
return unpad(padded_data, AES.block_size).decode()
# 生成一個(gè)16字節(jié)的隨機(jī)密鑰
key = get_random_bytes(16)
# 加密
message = "Hello, PyCryptodome!"
encrypted = encrypt_aes(message, key)
print(f"加密后: {encrypted.hex()}")
# 解密
decrypted = decrypt_aes(encrypted, key)
print(f"解密后: {decrypted}")3.2 非對(duì)稱(chēng)加密 - RSA
RSA是一種常用的非對(duì)稱(chēng)加密算法,適用于數(shù)據(jù)加密和數(shù)字簽名。以下是RSA加密和解密的示例:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import binascii
# 生成RSA密鑰對(duì)
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
# 加密
message = b"Hello, RSA!"
rsa_public_key = RSA.import_key(public_key)
rsa_public_key = PKCS1_OAEP.new(rsa_public_key)
encrypted = rsa_public_key.encrypt(message)
print(f"加密后: {binascii.hexlify(encrypted)}")
# 解密
rsa_private_key = RSA.import_key(private_key)
rsa_private_key = PKCS1_OAEP.new(rsa_private_key)
decrypted = rsa_private_key.decrypt(encrypted)
print(f"解密后: {decrypted.decode()}")3.3 哈希函數(shù) - SHA256
哈希函數(shù)用于生成消息摘要,常用于數(shù)據(jù)完整性檢查和密碼存儲(chǔ)。以下是使用SHA256哈希的示例:
from Crypto.Hash import SHA256
def hash_sha256(data):
hash_object = SHA256.new(data=data.encode())
return hash_object.hexdigest()
message = "Hello, SHA256!"
hashed = hash_sha256(message)
print(f"SHA256哈希值: {hashed}")3.4 消息認(rèn)證碼 - HMAC
HMAC (Hash-based Message Authentication Code) 用于驗(yàn)證消息的完整性和真實(shí)性。以下是HMAC的使用示例:
from Crypto.Hash import HMAC, SHA256
def create_hmac(key, message):
hmac = HMAC.new(key, msg=message.encode(), digestmod=SHA256)
return hmac.hexdigest()
def verify_hmac(key, message, received_mac):
hmac = HMAC.new(key, msg=message.encode(), digestmod=SHA256)
try:
hmac.hexverify(received_mac)
return True
except ValueError:
return False
# 創(chuàng)建HMAC
secret_key = b"my_secret_key"
message = "Hello, HMAC!"
mac = create_hmac(secret_key, message)
print(f"HMAC: {mac}")
# 驗(yàn)證HMAC
is_valid = verify_hmac(secret_key, message, mac)
print(f"HMAC驗(yàn)證結(jié)果: {is_valid}")4. 總結(jié)
PyCryptodome提供了豐富的加密功能,可以滿足多種安全需求。本文介紹了幾個(gè)常見(jiàn)的使用場(chǎng)景,包括對(duì)稱(chēng)加密、非對(duì)稱(chēng)加密、哈希函數(shù)和消息認(rèn)證碼。在實(shí)際應(yīng)用中,請(qǐng)根據(jù)具體需求選擇合適的加密算法和參數(shù),并確保正確管理密鑰。
到此這篇關(guān)于Python PyCryptodome庫(kù)介紹與實(shí)例的文章就介紹到這了,更多相關(guān)Python PyCryptodome庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接
這篇文章主要給大家介紹了Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
Python函數(shù)默認(rèn)參數(shù)設(shè)置的具體方法
本文主要介紹了Python函數(shù)默認(rèn)參數(shù)設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
TensorFlow打印tensor值的實(shí)現(xiàn)方法
今天小編就為大家分享一篇TensorFlow打印tensor值的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
節(jié)日快樂(lè)! Python畫(huà)一棵圣誕樹(shù)送給你
節(jié)日快樂(lè)!這篇文章主要介紹了如何使用Python畫(huà)一棵圣誕樹(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
Python數(shù)據(jù)庫(kù)編程之pymysql詳解
本文主要介紹了Python數(shù)據(jù)庫(kù)編程中pymysql,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Python面試之os.system()和os.popen()的區(qū)別詳析
Python調(diào)用Shell,有兩種方法:os.system(cmd)或os.popen(cmd)腳本執(zhí)行過(guò)程中的輸出內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于Python面試之os.system()和os.popen()區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-06-06
python實(shí)現(xiàn)人機(jī)對(duì)戰(zhàn)的井字棋游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)人機(jī)對(duì)戰(zhàn)的井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

