RijndaeI 算法是一种分组长和密钥长都可变的迭代分组密码算法。
Rijndael密钥生成步骤Rijndael密钥的轮密钥生成经过了密钥扩展和轮密钥选择两个步骤,其基本原则是:
(1)轮密钥的总位数等于分组长乘以(1 + Nr),如分组长为128bit,轮数为 Nr = 10,则轮密钥的总长为 128 *(10 + 1)=1408bit;
(2)种子密钥扩展为扩展密钥,种子密钥长度为 4*Nk 个字节 ,Nk 是种子密钥字长;
(3)轮密钥由以下方法从扩展密钥中获得:对第 1 轮密钥由前 Nb 个字构成;第 2 轮密钥由第二个 Nb 个字即第 Nb + 1 个字到第 2Nb 个字构成;以下依次类推⋯。
密钥扩展扩展密钥用数组 w [Nb*(Nr + 1)]表示,前 Nk 个字是种子密钥,其它的密钥字通过递归定义生成。由于密钥扩展函数取决于 Nk 的值,根据 Nk 的值分了 Nk " 6 和 Nk> 6 两种情况。
(1)Nk " 6 时,用类 C 语言描述为:
KeyExpansion (byte Key [4 ! Nk],word w [Nb ! (Nr + 1)]){for(i = 0;i