[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数据加密完结

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CN.LG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值