原创 AES加密算法 02

2009-10-3 23:37 2855 6 6 分类: 工程师职场
之前犯烂看懂了没写笔记 现在放假没事干想弄了 只好重新看 真郁闷...

主程序可以被大概分成三块 加解密过程 s盒和密钥扩展 其中加密过程和解密过程都要分四步 subbyte shiftrow mixcolumn addroundkey 加解密稍有区别

首先 以128位密文为例 可以把128位数变成一个4*4的方块 每个其中的一格是8bit

subbyte     //就是4*4中每块都进s盒 做个ram之类的或者查个表就行 愿意深究的话可以看看官方文档 里面会详细讲s盒怎么算出来的 要用到之前的数学基础 懒得看就用现成的sbox就好了 看懂了对写程序也没大用反正不会让速度变快
shiftrow    //顾名思义 行变换 第一行不变 第二行转圈左移一格 第三行转圈左移两格 第四行转圈左移三格
mixcolumn   //列混合 还是这个 4*4的每列与c(x)进行运算 又要用到之前的数学基础了 不过还是可以省事 因为官方文档里把最后的运算式写的挺清楚 要用到之前的点乘(.)和异或(+)
每一列的运算初始值是s0,s1,s2,s3结果是S0,S1,S2,S3 运算式如下
S0 = (02.s0) + (03.s1) + s2 + s3
S1 = s0 + (02.s1) + (03.s2) + s3
S2 = s0 + s1 + (02.s2) + (03.s3)
S3 = (03.s0) + s1 + s2 + (02.s3)
因为只和02 03进行.运算 所以过程也会简单很多
addroundkey //加入轮密钥 就是和密钥进行异或运算 具体情况要参照轮数和密钥扩展部分 这些明天再说

另外 wiki上还写了这样几句 大概意思是这样的
有关算法的优化 对于32bit以上的系统 可以将subbyte shiftrow mixcolumn合并成一步 反正也要查表不如干脆查一个大表 这样就需要四个256格每格内容为32bit的表 也就是说要占用4kbyte内存(1k一个表) 这样每轮运算步骤就减少为 先在addroundkey阶段进行4次32bit或运算 查16次32bit表 再进行12次32bit或运算 如果嫌4k内存太多 可以改成1k

看困了 看会动画片睡觉去
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /3 下一条