AES和RSA

1.AES对称加密

1.1 什么是 AES 加密?

AES(Advanced Encryption Standard,高级加密标准)是一种 对称分组加密算法,由美国国家标准与技术研究院(NIST)于 2001 年确立。它以其高效性和安全性成为数据加密的国际标准,广泛应用于数据保护场景。


1.2 AES 的主要特点

  1. 对称加密:加密和解密使用相同的密钥。

  2. 分组加密:AES 将数据分成固定大小的块进行加密,块大小固定为 128 位(16 字节)

  3. 密钥长度可选:支持 128 位、192 位和 256 位密钥长度,不同长度决定安全性等级和加密速度。

  4. 安全性高:AES 对抗目前已知的大多数攻击方法,适合保护敏感数据。


1.3 AES 的工作原理

1. 输入数据
  • 明文:待加密的数据,分成 128 位(16 字节)分组。

  • 密钥:用户提供的密钥,长度为 128 位(16 字节)、192 位(24 字节)或 256 位(32 字节)。

  • 模式:加密时可以选择不同的工作模式(如 ECB、CBC、CFB、OFB)。

2. 加密过程

AES 的加密过程由多轮转换组成,每轮包含以下几个步骤:

  1. SubBytes(字节替换):用一个固定的 S-box 表将每个字节替换为另一个字节。

  2. ShiftRows(行移位):对数据块中的每一行进行循环左移。

  3. MixColumns(列混淆):对数据块中的每列应用一个数学变换,使数据在列内扩散。

  4. AddRoundKey(密钥加轮):将当前密钥和数据块按位 XOR。

:最后一轮不执行 MixColumns

3. 解密过程

解密与加密是对称的,主要是加密过程的逆操作:

  1. 逆替换字节。

  2. 逆移位。

  3. 逆列混淆。

  4. 逆密钥加轮。


1.4 AES 的工作模式

AES 仅是加密的核心算法,结合不同模式才能实现完整的加密方案。常见模式有:

  1. ECB(电子密码本模式):每个分组独立加密。 优点:简单高效;缺点:容易暴露明文模式。

  2. CBC(密码分组链接模式):每个分组加密依赖前一个分组的密文,首块用初始化向量(IV)。 优点:安全性高;缺点:解密必须按顺序进行。

  3. CFB(加密反馈模式):将密文的一部分作为下一次加密的输入。 优点:可以加密长度非分组倍数的数据;缺点:依赖性较高。

  4. OFB(输出反馈模式):用一个伪随机数生成器生成密钥流。 优点:适合流式加密;缺点:对 IV 的随机性要求高。

  5. GCM(Galois/Counter 模式):一种结合了加密和认证功能的模式。 优点:高效且能防篡改,适合网络通信。


1.5 AES 加密的实际操作


使用 pycryptodome 库实现 AES 加密:

from Crypto.Cipher import AES
import base64
​
# 填充函数,使明文长度是 16 字节的倍数
def pad(text):
    return text + (16 - len(text) % 16) * chr(16 - len(text) % 16)
​
# 去填充函数
def unpad(text):
    return text[:-ord(text[-1])]
​
# AES 加密函数
def encrypt_aes(key, plaintext):
    key = key.encode('utf-8')  # 密钥转换为字节类型
    plaintext = pad(plaintext).encode('utf-8')  # 明文填充并转换为字节类型
    cipher = AES.new(key, AES.MODE_CBC, iv=b'0123456789abcdef')  # 使用 CBC 模式和固定的 IV
    encrypted = cipher.encrypt(plaintext)  # 加密
    return base64.b64encode(encrypted).decode('utf-8')  # 返回 Base64 编码的密文
​
# AES 解密函数
def decrypt_aes(key, ciphertext):
    key = key.encode('utf-8')
    ciphertext = base64.b64decode(ciphertext)  # 解码 Base64 密文
    cipher = AES.new(key, AES.MODE_CBC, iv=b'0123456789abcdef')  # 使用 CBC 模式和相同的 IV
    decrypted = cipher.decrypt(ciphertext)  # 解密
    return unpad(decrypted.decode('utf-8'))
​
# 示例
key = "MySecretKey12345"  # 16 字节密钥
message = "This is a secret message"
​
# 加密
encrypted_message = encrypt_aes(key, message)
print("加密后的消息:", encrypted_message)
​
# 解密
decrypted_message = decrypt_aes(key, encrypted_message)
print("解密后的消息:", decrypted_message)

1.6 AES 的优缺点

优点
  • 高安全性:AES 是当前已知最安全的对称加密算法之一。

  • 速度快:加密速度快,适合大数据量加密。

  • 硬件支持:很多硬件支持 AES 指令集,进一步提升性能。

缺点
  • 密钥管理难:密钥泄露会导致数据完全暴露。

  • 固定分组大小限制:数据必须是分组大小的整数倍,需填充。


1.7 应用场景

  • 网络通信加密(如 HTTPS)

  • 文件加密(如 ZIP 文件加密)

  • 无线通信协议(如 WPA2 协议)

  • 数据库加密(如 MySQL 加密)

AES 凭借其安全性和性能,在现代信息安全中扮演着重要角色。

AES要求密钥长度必须是 16字节、24字节或32字节

2.RSA非对称加密

RSA 加密是一种基于 非对称加密算法 的数据加密技术。由 Rivest、Shamir 和 Adleman 于 1977 年发明,RSA 也是这三位发明者名字的首字母缩写。它广泛用于安全数据传输,尤其在数字签名和密钥交换中起到核心作用。


2.1 RSA 加密的主要特点

  1. 非对称加密:RSA 使用一对密钥:公钥(公开)和私钥(保密)。

    • 公钥用于加密数据。

    • 私钥用于解密数据。

  2. 数学基础:依赖于大整数分解的困难性,因此安全性与密钥长度成正比。

  3. 安全性高:即使拥有公钥,也几乎不可能反推出私钥。

  4. 速度较慢:相比对称加密(如 AES),RSA 加密速度较慢,适合加密少量数据(如密钥)。


2.2 RSA 的工作原理

1. 密钥生成

RSA 基于以下数学过程生成密钥对:

  1. 选择两个大素数 pp 和 qq

  2. 计算 n=p⋅qn = p \cdot q:nn 是公钥和私钥的一个组成部分。

  3. 计算欧拉函数 ϕ(n)=(p−1)⋅(q−1)\phi(n) = (p-1) \cdot (q-1)

  4. 选择公钥指数 ee:ee 与 ϕ(n)\phi(n) 互质,常用值为 65537。

  5. 计算私钥指数 dd:dd 是 ee 关于 ϕ(n)\phi(n) 的模反元素,满足: e⋅d≡1 (mod ϕ(n))e \cdot d \equiv 1 \ (\text{mod} \ \phi(n))

最终:

  • 公钥为 (e,n)(e, n)

  • 私钥为 (d,n)(d, n)


2. 加密

数据加密使用公钥 (e,n)(e, n)。加密公式为:

C=Me (mod n)C = M^e \ (\text{mod} \ n)

其中:

  • MM:明文(以数值形式表示)。

  • CC:密文。


3. 解密

解密使用私钥 (d,n)(d, n)。解密公式为:

M=Cd (mod n)M = C^d \ (\text{mod} \ n)

其中:

  • CC:密文。

  • MM:明文。

由于 ee 和 dd 是互为模反的,解密可以还原原始数据。


2.3 RSA 的应用场景

  1. 数据加密:使用公钥加密敏感信息,确保只有持有私钥的人可以解密。

  2. 数字签名:使用私钥对数据进行签名,接收方用公钥验证签名,确认数据来源和完整性。

  3. 密钥交换:安全地传输对称加密的密钥(如 AES 密钥)。

  4. 身份认证:用于认证通信双方的身份。


2.4 RSA 的优缺点

优点
  1. 高安全性:基于大整数分解问题,目前无法通过有效算法破解。

  2. 无需共享密钥:公钥可以公开,私钥保密,避免密钥分发问题。

  3. 多功能性:既能加密,也能用于签名和认证。

缺点
  1. 速度较慢:加解密效率较低,通常用于少量数据加密。

  2. 密文长度增加:加密后数据长度增加。

  3. 安全性依赖密钥长度:较短的密钥容易被暴力破解。


2.5 实际操作

pyhton:使用 PyCryptodome 实现 RSA 加密
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
import base64
​
# 生成 RSA 密钥对
key = RSA.generate(2048)  # 2048 位密钥
private_key = key.export_key()
public_key = key.publickey().export_key()
​
# 打印公钥和私钥
print("私钥:", private_key.decode('utf-8'))
print("公钥:", public_key.decode('utf-8'))
​
# 加密函数
def encrypt_rsa(public_key, plaintext):
    pub_key = RSA.import_key(public_key)
    cipher = PKCS1_OAEP.new(pub_key)
    encrypted = cipher.encrypt(plaintext.encode('utf-8'))
    return base64.b64encode(encrypted).decode('utf-8')
​
# 解密函数
def decrypt_rsa(private_key, ciphertext):
    priv_key = RSA.import_key(private_key)
    cipher = PKCS1_OAEP.new(priv_key)
    decrypted = cipher.decrypt(base64.b64decode(ciphertext))
    return decrypted.decode('utf-8')
​
# 示例用法
message = "This is a secret message"
encrypted_message = encrypt_rsa(public_key, message)
print("加密后的消息:", encrypted_message)
​
decrypted_message = decrypt_rsa(private_key, encrypted_message)
print("解密后的消息:", decrypted_message)

2.6 总结

特性描述
密钥类型公钥加密,私钥解密(或反过来)
安全性基于大整数分解问题,安全性高
速度相较于对称加密(如 AES),速度较慢
用途用于加密少量数据、签名验证和密钥交换
AESRSA是两种常用的加密算法,用于保护数据的安全性。它们在不同的场景下有不同的应用特点。 AES(Advanced Encryption Standard)是一种对称加密算法,也被称为高级加密标准。它使用相同的密钥进行加密解密,因此被称为对称加密算法AES算法具有高效、安全、可靠的特点,被广泛应用于数据加密领域。AES算法支持不同的密钥长度,包括128位、192位256位。较长的密钥长度可以提供更高的安全性,但也会增加计算复杂度。 RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,也被称为公钥加密算法RSA算法使用一对密钥,包括公钥私钥。公钥用于加密数据,私钥用于解密数据。RSA算法的安全性基于大数分解的困难性,即将一个大数分解成其素因子的困难性。RSA算法在数字签名、密钥交换等场景中得到广泛应用。 关于安全性方面,AESRSA都是经过广泛验证使用的加密算法,具有较高的安全性。AES算法在对称加密中被认为是目前最安全的算法之一,尤其在使用256位密钥长度时,其安全性非常高。RSA算法在非对称加密中也被广泛使用,但相对于AES算法RSA算法的计算复杂度较高,因此在加密大量数据时可能会影响性能。 总的来说,AESRSA都是重要的加密算法,用于保护数据的安全性。在实际应用中,可以根据具体需求选择合适的算法密钥长度来保障数据的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值