Python中加密与解密是一个广泛的话题,因为存在多种加密技术(如对称加密、非对称加密、哈希等)和库(如cryptography
、PyCrypto
、hashlib
等)来实现这些技术。下面我将简要介绍一些基本的加密解密方法及其Python实现。
1. 哈希加密(单向加密)
哈希加密是一种单向加密技术,主要用于验证数据的完整性,而不是为了加密数据以供解密。常见的哈希算法包括MD5、SHA-1、SHA-256等。
使用hashlib
库进行哈希加密:
import hashlib
def hash_password(password):
# 使用sha256算法
sha_signature = hashlib.sha256(password.encode()).hexdigest()
return sha_signature
# 使用示例
password = "my_secret_password"
hashed_password = hash_password(password)
print(hashed_password)
2. 对称加密
对称加密使用相同的密钥进行加密和解密。常见的算法包括AES、DES等。
使用cryptography
库进行AES加密解密:
首先,你需要安装cryptography
库(如果你还没有安装的话):
pip install cryptography
然后,你可以使用以下代码进行AES加密和解密:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
from base64 import b64encode, b64decode
def aes_encrypt(plaintext, key):
iv = os.urandom(16) # 随机生成初始化向量
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
padder = padding.PKCS7(algorithms.AES.block_size).padder()
padded_data = padder.update(plaintext) + padder.finalize()
encrypted = encryptor.update(padded_data) + encryptor.finalize()
return iv + encrypted
def aes_decrypt(ciphertext, key):
iv = ciphertext[:16] # 假设IV是16字节
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
decryptor = cipher.decryptor()
padded_plaintext = decryptor.update(ciphertext[16:]) + decryptor.finalize()
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
return unpadder.update(padded_plaintext) + unpadder.finalize()
# 使用示例
key = os.urandom(16) # 随机生成密钥
plaintext = b"Hello, world!"
encrypted = aes_encrypt(plaintext, key)
decrypted = aes_decrypt(encrypted, key)
print(decrypted)
注意:这里为了简单起见,密钥和IV是随机生成的,并在加密和解密过程中都使用了相同的值。在实际应用中,密钥和IV的管理要复杂得多,并且需要确保它们的安全性。
3. 非对称加密
非对称加密使用一对密钥(公钥和私钥)进行加密和解密。公钥用于加密数据,私钥用于解密数据。常见的算法包括RSA、ECC等。
由于非对称加密的复杂性和篇幅限制,这里不再详细展开。但你可以使用Python的cryptography
库来实现非对称加密。
注意
- 加密和解密是一个复杂的领域,涉及许多安全考虑因素。
- 在选择加密算法和库时,请确保它们已经过充分测试,并且受到广泛认可。
- 始终注意密钥管理,确保密钥的安全性和保密性。