首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

求随便8比特数在AES的S-Box中的对应值(一)

2013-10-13 
求任意8比特数在AES的S-Box中的对应值(一)题目要求:写一个程序,给定任意8比特数,可求其在S-Box中所对应的。

求任意8比特数在AES的S-Box中的对应值(一)

题目要求:

写一个程序,给定任意8比特数,可求其在S-Box中所对应的值。
首先上课的时候,由于老师经常提到查表得出结果什么的,所以一看到这道题我的第一反应就是首先把课本的S-Box表敲进去,然后直接用行号和列号来查。后来听同学提醒才知道其实是要先求逆元,再用矩阵变换来计算得到S-Box转换结果。好吧,是我头脑太简单了,我认了。
记得以前看别人的程序经常看到一个大矩阵,当时觉得这是一个很酷的事,于是我也很傻逼地照做了。先来看看这道题的傻瓜式做法:


不能说这种方法错了,只能说是不符合老师的要求吧。
好吧,还是规规矩矩地直接用课本的转换方法做吧(来自CANS第五版5.3.1):AES的S盒按如下方式构造:(1)按字节值升序逐行初始化S盒(16 * 16),共256个。(2)把S盒中的每个字节映射为它在GF(2^8)中的逆元,{00}被映射为它自身。(3)记S盒中每个字节的8个构成位为(b7, b6, b5, b4, b3, b2, b1, b0),对S盒中的每个字节的每个位做如下的变换:b[i] ' = b[i] xor b[(i+4)mod8] xor b[(i+5)mod8] xor b[(i+6)mod8] xor b[(i+7)mod8] xor c[i]。其中(c7,c6,c5,c4,c3,c2,c1,c0) = 01100011。
按照以上规则,若输入某个数a,对其进行S-Box转换的方法为:(1)求 a的逆元a-1。00H的逆元为00H。(2)对a-1进行矩阵变换,也就是对每一位进行以上(3)的操作。
分析完毕,看代码部分。


比较两种方法,明显第一种方法运行效率更高,是用开发者的开发效率换来的。很可惜不符合老师要求。第二种方法用了枚举方法来求逆元,由于GF(2^8)最多才256个数,所以对程序运行效率影响不大,但是如果该域数量变得很大,那就只能用其它方法来求逆元了。
好吧,AES的S-Box会做了(尽管算法并不够好),等我学到了新东西再更新吧。

热点排行