aes128 算法源代码
时间: 2023-09-06 12:01:40 浏览: 140
aes.rar_AES
AES(Advanced Encryption Standard)是一种对称密钥加密算法,使用了128位的密钥长度。下面是AES-128算法的伪代码描述:
1. 初始化
定义固定长度的数组s_box[256]和固定长度的查找表s_box_inv[256],这些数组包含了AES的S盒和逆S盒的预先计算值。
定义固定长度的数组round_key[176],用于存储扩展密钥(Expanded Key)。
将输入的128位密钥按字节存储到数组key[16]中。
2. 扩展密钥(Key Expansion)
通过迭代运算,从输入的密钥生成一系列轮密钥(Round Keys)。轮密钥的数量等于轮数+1,共有11个轮密钥。
首先将输入密钥复制到扩展密钥数组的前16个字节,在之后的迭代中,每四个字节执行一系列操作,生成下一个轮密钥。
3. 轮密钥加(Add Round Key)
将输入的明文按字节存储到数组state[16]中。
将第一个轮密钥与state数组中的数据进行异或运算。
4. 循环运算(Rounds)
这个步骤会在轮数内重复执行。
四个基本运算:字节替代(SubBytes)、行位移(ShiftRows)、列混淆(MixColumns)和轮密钥加(Add Round Key)。
5. 字节替代(SubBytes)
使用S盒(数组s_box[256])替换state数组中的每个字节。
6. 行位移(ShiftRows)
行位移操作对state数组进行变换。
第一行不变。
第二行左移1个字节。
第三行左移2个字节。
第四行左移3个字节。
7. 列混淆(MixColumns)
列混淆操作对state数组进行变换。
将state数组中的每一列转换成多项式,并与固定矩阵进行乘法运算。
8. 轮密钥加(Add Round Key)
将当前轮的密钥与state数组中的数据进行异或运算。
9. 最后一轮
执行字节替代、行位移和轮密钥加操作。
10. 输出密文
将state数组中的数据按字节存储到输出的密文中。
以上是AES-128算法的基本步骤和操作,详细的源代码实现需要进行巨大的工作量,需要考虑细节和与平台相关的问题。
阅读全文