Python cryptography 库

举报
Rolle 发表于 2025/01/31 09:31:54 2025/01/31
【摘要】 在现代社会,信息安全已成为我们日常生活的一部分。无论是在互联网金融、社交媒体,还是在政府部门的信息存储与传输中,加密都起到了至关重要的作用。加密技术主要分为两类:对称加密和非对称加密。对称加密的特点是加密和解密使用相同的密钥,而非对称加密则使用一对密钥(公钥与私钥)。Python 是一门广泛使用的编程语言,而 cryptography 库则是其提供的一款强大而易于使用的加密工具包。它提供了对...

在现代社会,信息安全已成为我们日常生活的一部分。无论是在互联网金融、社交媒体,还是在政府部门的信息存储与传输中,加密都起到了至关重要的作用。加密技术主要分为两类:对称加密非对称加密。对称加密的特点是加密和解密使用相同的密钥,而非对称加密则使用一对密钥(公钥与私钥)。

Python 是一门广泛使用的编程语言,而 cryptography 库则是其提供的一款强大而易于使用的加密工具包。它提供了对常见加密算法的支持,并能够实现对称加密、非对称加密、哈希算法、数字签名以及其他高级加密功能。

2. 环境搭建与安装

在使用 cryptography 库之前,首先需要安装它。我们可以通过以下方式安装:

代码语言:javascript
复制
pip install cryptography

安装完成后,通常无需其他依赖。但在某些情况下,可能需要安装一些依赖包,比如编译 C 扩展的工具。可以通过以下命令安装:

代码语言:javascript
复制
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev


3. 对称加密

对称加密使用相同的密钥进行加密和解密。常见的对称加密算法有 AES、DES 和 3DES。在 cryptography 库中,我们可以使用 FernetAES 来实现对称加密。

使用 AES 加密

首先,我们来看如何用 AES 实现对称加密。我们可以使用 cryptography.hazmat.primitives.ciphers 模块来操作。

代码示例:

代码语言:javascript
复制
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from os import urandom

# 生成密钥和IV
key = urandom(32)  # AES-256
iv = urandom(16)

# 加密数据
def encrypt(data, key, iv):
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    encryptor = cipher.encryptor()
    return encryptor.update(data) + encryptor.finalize()

# 解密数据
def decrypt(encrypted_data, key, iv):
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()
    return decryptor.update(encrypted_data) + decryptor.finalize()

# 测试加密和解密
data = b"Hello, this is a test message!"
encrypted_data = encrypt(data, key, iv)
decrypted_data = decrypt(encrypted_data, key, iv)

print(f"Original: {data}")
print(f"Encrypted: {encrypted_data}")
print(f"Decrypted: {decrypted_data}")
4. 非对称加密

非对称加密使用公钥和私钥对,公钥用于加密,私钥用于解密。RSA 是最常用的非对称加密算法。

使用 RSA 加密

cryptography 库提供了对 RSA 的支持。我们可以生成一对公私钥,并用公钥加密数据,用私钥解密数据。

代码示例:

代码语言:javascript
复制
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

# 生成 RSA 密钥对
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)

public_key = private_key.public_key()

# 使用公钥加密数据
message = b"Hello, this is a message."
ciphertext = public_key.encrypt(
    message,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

# 使用私钥解密数据
decrypted_message = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

print(f"Original message: {message}")
print(f"Decrypted message: {decrypted_message}")
5. 哈希与消息摘要

哈希算法广泛用于验证数据的完整性。常见的哈希算法有 MD5、SHA1 和 SHA256。

生成哈希值
代码语言:javascript
复制
from cryptography.hazmat.primitives import hashes

data = b"Hello, this is a test message!"
digest = hashes.Hash(hashes.SHA256())
digest.update(data)
hash_value = digest.finalize()

print(f"SHA256 Hash: {hash_value.hex()}")
6. 数字签名

数字签名用于验证数据的来源和完整性。我们使用私钥签名,使用公钥验证签名。

创建数字签名
代码语言:javascript
复制
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

# 使用私钥签名
signature = private_key.sign(
    message,
    padding.PKCS1v15(),
    hashes.SHA256()
)

# 使用公钥验证签名
try:
    public_key.verify(
        signature,
        message,
        padding.PKCS1v15(),
        hashes.SHA256()
    )
    print("Signature is valid!")
except Exception as e:
    print(f"Invalid signature: {e}")
7. 证书与密钥管理

在实际应用中,证书和密钥管理是非常重要的,尤其是在 SSL/TLS 加密中。cryptography 库支持加载、解析和管理 X.509 证书和私钥。

加载证书与私钥
代码语言:javascript
复制
from cryptography.hazmat.primitives import serialization

# 加载私钥
with open("private_key.pem", "rb") as f:
    private_key = serialization.load_pem_private_key(
        f.read(),
        password=None,
    )

# 加载证书
with open("certificate.pem", "rb") as f:
    certificate = serialization.load_pem_x509_certificate(
        f.read()
    )
8. 高级应用

cryptography 库还支持一些高级应用,比如密钥派生、IV 管理、TLS/SSL 证书验证等。这些功能在建立安全通信和存储时非常有用。

9. 常见问题与最佳实践
  • 密钥管理:确保密钥不泄露是最关键的安全措施。
  • 加密模式:选择正确的加密模式(如 CBC、GCM)对于加密安全至关重要。
10. 总结

cryptography 库是一个功能强大的加密工具,能够满足各种加密需求。从对称加密到非对称加密、从哈希到数字签名,它都能提供强有力的支持。通过使用 cryptography 库,Python 开发者可以轻松实现高安全性的加密操作。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。