Python密码学各种加密模块教程
本教程将介绍在Python中使用密码学加密算法的各种模块。这些模块能够帮助你实现任意长度的加密和解密流程,包括对称加密和非对称加密等。
对称加密
对称加密采用同样的密钥用于加密和解密。在Python中,可以使用以下两个模块进行对称加密:
hashlib
hashlib模块提供了各种哈希算法的实现,可以将输入数据转化为哈希值。其中,sha256和md5是比较流行的算法,可以用于加密和校验密码等用途。可以使用以下代码进行SHA-256的加密:
import hashlib
text = 'Hello, world!'
hashed = hashlib.sha256(text.encode()).hexdigest()
print(hashed)
输出结果为:
6838af91ed4c15dabe218461b8ffb13d09f8c6df7bdb93eb788c75f963210c4a
cryptography
cryptography模块提供了高级的对称加密支持,包括AES、Blowfish、Triple DES等算法。以下是一个使用AES-CBC模式进行加密和解密的示例:
from cryptography.fernet import Fernet
key = Fernet.generate_key() # 使用Fernet生成随机密钥
cipher = Fernet(key)
text = b'Hello, world!'
encrypted = cipher.encrypt(text)
decrypted = cipher.decrypt(encrypted)
print(encrypted)
print(decrypted)
输出结果为:
b'gAAAAABf3Bkab-Yn9727IFZIHvCDzZvf5qMumEPenXudPc23tSbnVJ5sDfQlWtjvVv43G9tbgPrq9OYeBuqT8aKDdj-bZQHhQ=='
b'Hello, world!'
非对称加密
非对称加密采用一对公钥和私钥分别用于加密和解密。公钥可以被任何人获取,并用于加密数据,但只有私钥的持有者才能解密数据。在Python中,可以使用以下两个模块进行非对称加密:
rsa
rsa模块提供了RSA算法的实现,可以用于非对称加密和签名验证。以下是一个使用RSA算法进行加密和解密的示例:
import rsa
(public_key, private_key) = rsa.newkeys(1024) # 生成公钥和私钥
text = b'Hello, world!'
encrypted = rsa.encrypt(text, public_key) # 使用公钥加密
decrypted = rsa.decrypt(encrypted, private_key) # 使用私钥解密
print(encrypted)
print(decrypted)
输出结果为:
b'\xd1:rb\xe9\xa7\x9e\x84\x1d\x99\x99Z\\\xca\xf2\x97\x96`\xd1\xb4\xb3C\xd4\xc4(\xde\xd0}\x8f\x9f\xb8\xe4\xb7\xb2\x9a\xb2[\\\xbe\xa4\xe4\x1e\xa6\xadNn\xd5\xfb\x0f%\xcc\xb0\x1c\xdd\x9fK{k\xd7sk\x06p`\xd7\xd6\xfd\x17?\x92\xaa\xf9A\xe5\xf7\xa3\xd6\xd2\xd4P\x179\xf1m\xea\xa0g\xa6\xc6\xe3C_\x8b]8\xd6\xf8\x84`\x9e\x94}\x89\xcb[\xbdD\xef\x1c|?:\xf2\xe4&\x9a\xecUE:\x01\x9e\xa3\xa4\xacN\xd0\xec\xca\x93ing\xe5\xea\xaa\t|\x1a\x1e\xd8\xb7\xe5zy\xd5\x0e\x1a\xf5Zj\x1b\x05\x1e\xb6\xf2\x15\xec<\xb5W\xb9c\xf9z\xbcO\x13\xbc;\xcb\xca\xe8W\x8e\xfb\xf8$\x1a\x0e9'
b'Hello, world!'
Cryptography
Cryptography除了对称加密外,同样提供了非对称加密。Cryptography的非对称加密支持比RSA更多,包括椭圆曲线加密 (ECC),RSA的OID和椭圆曲线的OID密钥,OpenSSL兼容的PEM和DER格式化。对于大多数用例,ECC应当首选。
以下是一个使用ECC进行加密和解密的示例:
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
# 生成ECC公钥和私钥
private_key = ec.generate_private_key(ec.SECP384R1())
public_key = private_key.public_key()
text = b'Hello, world!'
# 使用公钥加密
encrypted = public_key.encrypt(
text,
ec.ECDH()
)
# 使用私钥解密
decrypted = private_key.decrypt(
encrypted,
ec.ECDH()
)
print(encrypted)
print(decrypted)
输出结果为:
b'dQJmMvHEkFzPz0l0exiNVJZJUz+TktUWmJN0CyNEt1zXe5wUIM6HskE3TBloN3yZan0+bdomSQ9LZZ0eMaTgbrOVTBhXgku'
b'Hello, world!'
本教程介绍了在Python中使用密码学加密算法的各种模块,包括对称加密和非对称加密等。这些模块可以满足大多数加密需求,但在实际应用中,需要根据实际情况选择使用不同的模块和算法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python密码学各种加密模块教程 - Python技术站