[Python数据加密]——MD5、SHA、AES、RSA

一、Python数据加密介绍

数据加密是信息安全领域的一个重要组成部分,它用于保护数据不被未授权访问。以下是一些常见的加密算法和方法:

MD5 (Message Digest Algorithm 5):

  • 一种广泛使用的哈希函数,可以产生128位的哈希值。
  • 通常用于验证文件完整性,但因为其易受到碰撞攻击,不推荐用于需要高安全性的场合。
  • SHA (Secure Hash Algorithm):

  • 一系列密码散列函数,包括SHA-1、SHA-2(如SHA-256、SHA-512)和SHA-3。
  • 比MD5更安全,能产生更长的哈希值,用于确保数据的完整性和验证。
  • AES (Advanced Encryption Standard):

  • 一种对称密钥加密标准,使用128位、192位或256位的密钥。
  • 非常安全,广泛用于保护数据传输和存储。
  • RSA:

  • 一种非对称加密算法,基于大整数分解的困难性。
  • 通常用于安全的数据传输,数字签名和密钥交换。
  • RSA算法使用两个密钥:一个公钥用于加密,一个私钥用于解密。
  • 二、Python数据加密示例

    1、MD5是一种广泛使用的哈希函数,可以生成128位的哈希值。以下是使用Python语言实现MD5加密的代码示例:

    import hashlib
    
    # 待加密的原始字符串
    original_string = 'Hello, World!'
    
    # 创建md5对象
    md5_obj = hashlib.md5()
    
    # 对原始字符串进行编码,因为md5需要bytes类型的数据
    md5_obj.update(original_string.encode())
    
    # 获取md5加密后的十六进制字符串
    md5_digest = md5_obj.hexdigest()
    
    print("MD5 Digest:", md5_digest)

    2、可以使用内置的hashlib库来实现SHA哈希算法。以下是使用SHA-256算法对字符串进行哈希加密的示例代码:

    import hashlib
    
    # 待加密的原始字符串
    original_string = 'Hello, World!'
    
    # 创建sha256对象
    sha256_obj = hashlib.sha256()
    
    # 对原始字符串进行编码,因为sha256需要bytes类型的数据
    sha256_obj.update(original_string.encode())
    
    # 获取sha256加密后的十六进制字符串
    sha256_digest = sha256_obj.hexdigest()
    
    print("SHA-256 Digest:", sha256_digest)

    3、可以使用cryptography库来实现AES加密。以下是一个使用AES加密算法的示例代码,这个例子使用128位的密钥和CBC模式(Cipher Block Chaining)进行加密:

    from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
    from cryptography.hazmat.primitives import padding
    from cryptography.hazmat.backends import default_backend
    import os
    
    # 待加密的原始数据
    data = b'Hello, World!'
    
    # AES密钥长度可以是16, 24, 32字节,分别对应AES-128, AES-192, AES-256
    key = os.urandom(16)  # 生成一个随机的16字节密钥
    iv = os.urandom(16)   # 生成一个随机的16字节初始化向量
    
    # 创建一个AES Cipher对象
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    
    # 对数据进行填充,确保其长度是块大小的整数倍
    padder = padding.PKCS7(algorithms.AES.block_size).padder()
    data = padder.update(data) + padder.finalize()
    
    # 加密数据
    encryptor = cipher.encryptor()
    encrypted_data = encryptor.update(data) + encryptor.finalize()
    
    print("Encrypted data:", encrypted_data)
    
    # 为了演示解密,我们在这里也提供解密的代码
    # 创建一个解密的Cipher对象
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()
    
    # 解密数据
    decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()
    
    # 去除填充
    unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
    decrypted_data = unpadder.update(decrypted_data) + unpadder.finalize()
    
    print("Decrypted data:", decrypted_data)

    4、使用cryptography库来实现RSA加密和解密。以下是一个使用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
    from cryptography.hazmat.backends import default_backend
    
    # 生成RSA密钥对
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
        backend=default_backend()
    )
    
    public_key = private_key.public_key()
    
    # 待加密的原始数据
    data = b'Hello, World!'
    
    # RSA加密
    encrypted = public_key.encrypt(
        data,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    
    print("Encrypted data:", encrypted)
    
    # RSA解密
    decrypted = private_key.decrypt(
        encrypted,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    
    print("Decrypted data:", decrypted)
    
    # 保存私钥到文件
    with open('private_key.pem', 'wb') as f:
        f.write(private_key.private_bytes(
            encoding=serialization.Encoding.PEM,
            format=serialization.PrivateFormat.PKCS8,
            encryption_algorithm=serialization.NoEncryption()
        ))
    
    # 加载私钥
    with open('private_key.pem', 'rb') as f:
        loaded_private_key = serialization.load_pem_private_key(
            f.read(),
            password=None,
            backend=default_backend()
        )
    
    # 确保加载的私钥与原始私钥相同
    assert private_key == loaded_private_key

    三、Python数据加密完结

            每种加密方法都有其特定的用途和安全级别。选择哪种加密方法取决于你的具体需求,比如需要保护的数据类型、安全要求、性能考虑等。在实际应用中,通常需要结合使用多种加密技术来达到最佳的安全效果。

    作者:CnLg.NJ

    物联沃分享整理
    物联沃-IOTWORD物联网 » [Python数据加密]——MD5、SHA、AES、RSA

    发表回复