欢迎访问宙启技术站
智能推送

了解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中常见的字符串加密和解密方式,可以根据具体需求选择合适的方式进行加密和解密。需要根据实际情况选择算法和密钥的长度、存储和管理密钥的安全性等。