自学内容网 自学内容网

加密算法 AES、RSA、AES 和 RSA混合加密

一、对称加密算法 AES

1.简介

   密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一 。
   该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之。

2.加密模式

   AES(Advanced Encryption Standard)是一种对称加密算法,它通常使用128位、192位或256位密钥进行加密和解密。下面是一些常见的AES加密模式:

(1)ECB(Electronic Code Book):这是最简单的加密方式,其中数据块被分成固定长度的大小,然后对每个分组应用一个特定的加密函数。

(2)CBC(Cipher Block Chaining):这是一种更复杂但更为安全的方法,它使用一个随机初始向量来确保数据块顺序正确。在每次加密过程中,都会生成一个新的密钥和IV。

(3) OFB(Output Feedback):这是CBC的一个变体,它使用一个输出向量来更新明文,而不是每次加密都使用一个新的密钥。这使得加密过程更加安全,并且更难被预测。

(4)CTR(Counter-Mode):这是OFB的变体,其中数据块被分成固定长度的部分,在每个部分应用不同的加密函数。这种方式通常用于高速数据传输中,因为可以减少处理延迟。

(5)CFB(Counter-Feedback):这是一种CB和CFS模式组合起来的加密方式,它结合了CB的可预测性和OFB的安全性。

每种AES加密模式都有其特定的优势和适用场景。选择适合当前任务或需求的加密模式是至关重要的,这需要根据具体情况来决定。

3.Python 实现AES (CBC模式)加密算法

(1)安装 cryptography 库

pip install pika cryptography

(2)Python 服务端程序

1)对文件加密
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad

# 生成一个随机的密钥
def generate_key(key_size=16):
    return get_random_bytes(key_size)

# AES 加密文件
def aes_encrypt_file(input_file_path, output_file_path, key):
    with open(input_file_path, 'rb') as input_file:
        data = input_file.read()
    
    cipher = AES.new(key, AES.MODE_CBC)
    iv = cipher.iv
    cipher_text = cipher.encrypt(pad(data, AES.block_size))

    with open(output_file_path, 'wb') as output_file:
        output_file.write(iv + cipher_text)

# AES 解密文件
def aes_decrypt_file(input_file_path, output_file_path, key):
    with open(input_file_path, 'rb') as input_file:
        iv = input_file.read(AES.block_size)
        cipher_text = input_file.read()

    cipher = AES.new(key, AES.MODE_CBC, iv)
    plain_text = unpad(cipher.decrypt(cipher_text), AES.block_size)

    with open(output_file_path, 'wb') as output_file:
        output_file.write(plain_text)

# 示例使用
key = generate_key()
input_file_path = 'example.txt'
encrypted_file_path = 'encrypted.bin'
decrypted_file_path = 'decrypted.txt'

# 写入示例数据到文件
with open(input_file_path, 'w') as file:
    file.write

原文地址:https://blog.csdn.net/qq_42393720/article/details/140363647

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!