了解Python中字符串的加密和解密方式
发布时间:2023-12-18 12:47:48
在Python中,有多种方式可以对字符串进行加密和解密操作。下面将介绍几种常见的加密和解密方式,并提供相应的使用示例。
1. BASE64编码和解码:
BASE64是一种常用的编码方式,将二进制数据转换为可打印字符,常用于数据传输和存储。在Python中,可以使用base64库进行BASE64的编码和解码操作。
import base64 # 编码 text = "Hello World!" encoded_text = base64.b64encode(text.encode()) print(encoded_text) # 输出:b'SGVsbG8gV29ybGQh' # 解码 decoded_text = base64.b64decode(encoded_text).decode() print(decoded_text) # 输出:Hello World!
2. 散列函数(哈希函数):
散列函数将任意长度的输入转换为固定长度的输出,常用于验证数据的完整性和比较数据是否相等。在Python中,可以使用hashlib库提供的各种散列算法进行字符串的加密和解密。
import hashlib # MD5加密 text = "Hello World!" hashed_text = hashlib.md5(text.encode()).hexdigest() print(hashed_text) # 输出:3e25960a79dbc69b674cd4ec67a72c62 # SHA256加密 hashed_text = hashlib.sha256(text.encode()).hexdigest() print(hashed_text) # 输出:a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
3. 对称加密和解密:
对称加密算法使用相同的密钥进行加密和解密操作。在Python中,可以使用cryptography库提供的Fernet算法进行对称加密和解密。
from cryptography.fernet import Fernet # 生成密钥 key = Fernet.generate_key() # 加密 cipher_suite = Fernet(key) text = "Hello World!" encrypted_text = cipher_suite.encrypt(text.encode()) print(encrypted_text) # 输出类似:b'gAAAAABfGjMEGE09XnA...' # 解密 decrypted_text = cipher_suite.decrypt(encrypted_text).decode() print(decrypted_text) # 输出:Hello World!
4. 非对称加密和解密:
非对称加密算法使用一对密钥,即公钥和私钥,其中公钥用于加密,私钥用于解密。在Python中,可以使用cryptography库提供的RSA算法进行非对称加密和解密。
首先,需要生成一对公钥和私钥:
from cryptography.hazmat.primitives.asymmetric import rsa
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
with open("private_key.pem", "wb") as f:
f.write(private_pem)
with open("public_key.pem", "wb") as f:
f.write(public_pem)
然后,可以使用公钥和私钥进行加密和解密操作:
from cryptography.hazmat.primitives import serialization
# 加载私钥
with open("private_key.pem", "rb") as f:
private_pem = f.read()
private_key = serialization.load_pem_private_key(private_pem, password=None)
# 加载公钥
with open("public_key.pem", "rb") as f:
public_pem = f.read()
public_key = serialization.load_pem_public_key(public_pem)
# 加密
text = "Hello World!"
encrypted_text = public_key.encrypt(
text.encode(), padding.PKCS1v15()
)
print(encrypted_text)
# 解密
decrypted_text = private_key.decrypt(
encrypted_text, padding.PKCS1v15()
).decode()
print(decrypted_text)
这些都是Python中常见的字符串加密和解密方式,可以根据具体需求选择合适的方式进行加密和解密。需要根据实际情况选择算法和密钥的长度、存储和管理密钥的安全性等。
