首页  >  文章  >  后端开发  >  如何在 Python 中使用密码安全地加密和解密字符串?

如何在 Python 中使用密码安全地加密和解密字符串?

Barbara Streisand
Barbara Streisand原创
2024-10-22 21:03:02234浏览

How to Safely Encrypt and Decrypt Strings Using Passwords in Python?

在 Python 中使用密码安全地加密和解密字符串

Python 的密码学库是一个用于加密和解密数据的综合工具包。要使用密码加密字符串,您可以利用 Fernet 类,该类提供强大的加密功能,并包括时间戳、HMAC 签名和 Base64 编码等基本功能。

带密码的 Fernet

<code class="python">from cryptography.fernet import Fernet, FernetException

password = 'mypass'  
fernet = Fernet(password.encode())

encrypted_message = fernet.encrypt(b'John Doe')
decrypted_message = fernet.decrypt(encrypted_message)

print(encrypted_message)  # Encrypted string
print(decrypted_message.decode())  # 'John Doe'</code>

Fernet 通过应用多层加密并通过 HMAC 签名确保消息完整性来保证加密数据的安全。

Fernet 的密码派生密钥生成

直接在 Fernet 中使用密码很方便,使用密码生成密钥更安全。此方法涉及使用密钥派生函数从密码和盐派生密钥。

<code class="python">import secrets

from cryptography.fernet import Fernet
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

backend = default_backend()
salt = secrets.token_bytes(16)  # Generate a unique salt
password = 'mypass'.encode()  # Convert password to bytes

kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000,
    backend=backend
)
key = b64e(kdf.derive(password))  # Derive the secret key

fernet = Fernet(key)
encrypted_message = fernet.encrypt(b'John Doe')</code>

此方法通过使用从密码派生的强密钥为加密过程添加额外的保护层来增强安全性

其他加密方法

除了 Fernet,您可以根据您的具体要求考虑替代方案:

Base64 模糊:对于基本混淆,可以使用base64编码,无需加密。但是,这并不能提供任何实际的安全性,而只是模糊性。

HMAC 签名: 如果您的目标是数据完整性,请使用 HMAC 签名来确保数据未被篡改。

AES-GCM 加密: AES-GCM 使用 Galois/Counter 模式块加密来提供加密和完整性保证,类似于 Fernet,但没有用户友好的功能。

以上是如何在 Python 中使用密码安全地加密和解密字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn