当前位置: 首页 > news >正文

现代密码学 | 高级加密标准(AES)

接下来我们将讨论目前大多数计算机和硬件基础设施所使用的最重要的加密算法,例如高级加密标准(AES)、里弗斯特-沙米尔-阿德曼算法(RSA)、椭圆曲线加密(ECC)、基于格的加密、(环)带错学习、同态加密。

2.2.3.1 高级加密标准 Advanced Encryption Standard(AES)
现代密码学围绕高级加密标准(AES)构建,在数字安全至关重要的时代,它至关重要。AES 旨在取代过时的数据加密标准(DES),如今已成为金融、电信和政府等多个行业数据加密的行业标准。

美国国家标准与技术研究院(NIST)于 2001 年创建了高级加密标准(AES),这是经过全面且竞争激烈的筛选程序的结果。由于数据加密标准(DES)存在弱点,主要是其 56 位的密钥长度相对较小,使其容易受到暴力破解攻击,因此需要一个新的加密标准。1997 年,NIST 发布了新加密标准的征集令,收到了来自世界各地的 15 份响应。比利时密码学家文森特·里杰门(Vincent Rijmen)和琼·达曼(Joan Daemen)创建的 Rijndael 算法经过全面评估后被选中,并被命名为高级加密标准(AES)。

由于 AES 使用对称密钥进行加密,因此加密和解密都需要同一个密钥。它支持 128 位、192 位和 256 位的密钥大小,为抵御可能的入侵提供了强大的保护。AES 的运作基于状态,即一个 4×4 列优先顺序的字节矩阵。该方法通过多轮处理将明文转换为密文,每轮处理都需要若干步骤。


AES 的主要步骤包括:

• 字节替换(SubBytes)。为了使密码具有非线性,使用一个替换盒(S 盒)将状态矩阵中的每个字节替换为不同的字节。

• 行移位(ShiftRows)。通过循环移位状态矩阵的行来实现密码中的扩散。

• 列混合(MixColumns)。为了进一步提高扩散性,通过线性变换将状态矩阵的列组合起来。

• 轮密钥加(AddRoundKey)。使用按位异或将状态矩阵与从主密钥中获得的轮密钥组合起来。

对于 128 位密钥,AES 算法有 10 轮;对于 192 位密钥,有 12 轮;对于 256 位密钥,有 14 轮。轮数随密钥大小而变化。将这两个过程结合起来,保证了 AES 具有强大的安全性和抵御各种加密攻击的能力。

由于其有效性和安全性,AES 经常被用于许多不同的应用中。它是 SSL/TLS 等安全通信协议的组成部分,这些协议保证了互联网上传输的数据的完整性和保密性,并构成了互联网安全的基础。

AES 还用于虚拟专用网络(VPN)中。虚拟专用网络(VPN)用于保护在互联网上远程站点之间传输的数据。高级加密标准(AES)在金融行业中用于保护信用卡处理和网上银行等系统中的敏感数据和交易。

Py示例代码,采用CBC模式和PKCS7填充方案(仅供学习参考):

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.backends import default_backend
import osdef aes_encrypt(plaintext: bytes, key: bytes) -> tuple:"""AES加密(CBC模式)"""# 生成随机初始化向量(IV)iv = os.urandom(16)# 设置加密器cipher = Cipher(algorithms.AES(key),modes.CBC(iv),backend=default_backend())encryptor = cipher.encryptor()# 应用PKCS7填充padder = padding.PKCS7(128).padder()padded_data = padder.update(plaintext) + padder.finalize()# 加密数据ciphertext = encryptor.update(padded_data) + encryptor.finalize()return ciphertext, ivdef aes_decrypt(ciphertext: bytes, key: bytes, iv: bytes) -> bytes:"""AES解密(CBC模式)"""# 设置解密器cipher = Cipher(algorithms.AES(key),modes.CBC(iv),backend=default_backend())decryptor = cipher.decryptor()# 解密数据padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize()# 移除PKCS7填充unpadder = padding.PKCS7(128).unpadder()plaintext = unpadder.update(padded_plaintext) + unpadder.finalize()return plaintext# 示例用法
if __name__ == "__main__":# 生成32字节(256位)密钥 - 支持128/192/256位secret_key = os.urandom(32)original_message = b"Hello, Advanced Encryption Standard!"print("原始消息:", original_message.decode())# 加密encrypted_data, iv = aes_encrypt(original_message, secret_key)print("加密结果 (HEX):", encrypted_data.hex())# 解密decrypted_data = aes_decrypt(encrypted_data, secret_key, iv)print("解密消息:", decrypted_data.decode())

运行结果:
在这里插入图片描述

关键步骤

1、模逆计算修正:

行列式先转换为正数:det = det % mod

明确验证行列式是否可逆:if np.gcd(det, mod) != 1

正确计算伴随矩阵的符号:[[d, -b], [-c, a]]

2、数据类型强化:

密钥矩阵指定为整数类型:dtype=int

块操作后明确转换为列表:tolist()

3、验证结果:
加密"HELLOWOR"(数字序列:[7,4,11,11,14,22,14,17])

分块加密:

[7,4] × [[7,8],[11,11]] = [77+411, 78+411] = [93, 100] → [93%26=15(H), 100%26=22(W)]

[11,11] → [117+1111, 118+1111] = [198, 209] → [198%26=16(Q), 209%26=1(B)]

正确处理负数和模运算,确保加密/解密过程正确。

相关文章:

  • Syslog 全面介绍及在 C 语言中的应用
  • 主流电商平台的反爬机制解析
  • Idea使用springAI搭建MCP项目
  • 使用摄像头推流+VLC软件拉流
  • 跟我学c++中级篇——动态库的资源处理
  • 气体放电管(GDT)选型时需要注意的事项
  • 前端流式接收数据讲解
  • 分表后如何做分页查询?
  • Linux之Nginx配置篇
  • 【Java工程师面试全攻略】Day4:JVM原理与性能调优深度解析
  • Redis-6.2.9 主从复制配置和详解
  • 近屿智能第六代 AI 得贤招聘官首秀 —— 解锁「拟人化智能交互」AI面试新体验
  • 128、STM32H723ZGT6实现串口IAP
  • AtCoder Beginner Contest 407(ABCDEF)
  • [ctfshow web入门] web80
  • NodeMediaEdge通道管理
  • 【二维数组】
  • 基于Java(SSH框架)+MySQL 实现(Web)公司通用门户(CMS)网站
  • 栈与队列:数据结构的有序律动
  • 二、OpenCV图像处理-图像处理
  • 开发网站怎么挣钱/b2b电子商务网站
  • pc端网站开发总结/杭州网站搜索排名
  • 药理学网站建设方案/保定网站seo
  • 如何做购物网站的后台/品牌互动营销案例
  • 没有logo可以做网站的设计吗/seo关键词排名优化怎样
  • 网站建设预付款比例/长沙建站工作室