Python 关于加密和解密

1、理解

加密是通过使用各种加密算法来对数据进行加密和解密的过程。Python 提供了许多内置库和第三方库,可以用于实现各种加密算法和技术,包括对称加密、非对称加密、哈希函数等。以下是 Python 中常用的一些加密相关的库和模块:

  1. hashlib 模块:Python 的 hashlib 模块提供了常见的哈希函数,如 MD5、SHA-1、SHA-256 等,用于生成数据的哈希值。
  2. cryptography 模块:cryptography 是一个功能强大且易于使用的加密库,支持对称加密、非对称加密、数字签名等操作。
  3. PyCrypto 模块:PyCrypto 是一个密码学工具包,提供了各种加密算法的实现,包括对称加密算法(如 AES、DES)、非对称加密算法(如 RSA)、消息认证码(MAC)等。
  4. PyCryptodome 模块:PyCryptodome 是 PyCrypto 的一个分支,提供了更多的加密算法和功能,并在性能和安全性上有所改进。
  5. cryptography.fernet 模块:cryptography 库中的 fernet 模块提供了 Fernet 对称加密算法的实现,用于简单且安全的加密和解密数据。
  6. PyJWT 模块:PyJWT 是用于 JSON Web Token(JWT)的 Python 库,用于生成和验证 JWT,通常用于身份验证和信息交换。

2、对称加密和非对称加密

对称加密和非对称加密是两种常见的加密算法,它们在加密和解密数据时使用不同的密钥管理方式。

  1. 对称加密

    • 定义:对称加密使用相同的密钥来加密和解密数据。加密和解密过程使用相同的密钥,因此称为对称加密。
    • 常见算法:常见的对称加密算法包括 AES(高级加密标准)、DES(数据加密标准)和 3DES 等。
    • 示例:以下是一个使用 PyCryptodome 模块进行 AES 对称加密和解密的简单示例:
    from Crypto.Cipher import AES
    from Crypto.Random import get_random_bytes
    
    # 生成随机密钥
    key = get_random_bytes(16)
    
    # 要加密的数据
    data = b"Hello, World!"
    
    # 创建 AES 加密对象
    cipher = AES.new(key, AES.MODE_EAX)
    
    # 加密数据
    ciphertext, tag = cipher.encrypt_and_digest(data)
    
    print("加密后的数据:", ciphertext)
    
    # 解密数据
    cipher = AES.new(key, AES.MODE_EAX, cipher.nonce)
    decrypted_data = cipher.decrypt_and_verify(ciphertext, tag)
    
    print("解密后的数据:", decrypted_data.decode('utf-8'))
    
  2. 非对称加密

    • 定义:非对称加密使用一对密钥,公钥和私钥,其中公钥用于加密数据,私钥用于解密数据。这种加密方式也称为公钥加密。
    • 常见算法:常见的非对称加密算法包括 RSA、DSA 和 ECC(椭圆曲线加密)等。
    • 示例:以下是一个使用 cryptography 模块进行 RSA 非对称加密和解密的简单示例:
    from cryptography.hazmat.primitives.asymmetric import rsa
    from cryptography.hazmat.primitives import serialization
    from cryptography.hazmat.primitives.asymmetric import padding
    from cryptography.hazmat.primitives import hashes
    
    # 生成 RSA 密钥对
    private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
    public_key = private_key.public_key()
    
    # 加密数据
    data = b"Hello, World!"
    ciphertext = public_key.encrypt(data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
    
    print("加密后的数据:", ciphertext)
    
    # 解密数据
    decrypted_data = private_key.decrypt(ciphertext, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
    
    print("解密后的数据:", decrypted_data.decode('utf-8'))
    

加密和解密算法和方法比较多,在实际应用中,我们需要根据具体的安全需求和情景来选择合适的加密算法和方法。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不在同一频道上的呆子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值