知识大全 通过 Java 如何实现 AES 密码算法

Posted 多项式

篇首语:别总是羡慕别人光芒万丈,却忘了自己也会发光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 通过 Java 如何实现 AES 密码算法相关的知识,希望对你有一定的参考价值。

通过 Java 如何实现 AES 密码算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   有关AES的一些理解  最近很多密码学的书都包含了最新的AES算法 但由于涉及的数学理论比较多 我也只是明白一些能让我实现他的皮毛   AES比较牛的地方是速度快 而且明文和密钥的长度可以是 位 并且可以任意组合 明文和密钥的长度不一定是一样长的 由于采用了模块化设计 算法包含 个步骤 字节替换 行位移 列混淆 密钥加法 这些步骤循环 轮 最让我恶心的第 轮的又不一样 没有列混淆   强烈建议大家看作者的英文论文和书 其中讲到了一种 位平台的快速实现方法 这种方法根据每一步的数学原理 将 步和为一步 那一大堆公式推倒我就不在这重复了 这种快速实现方法需要构造 个矩阵(加解密各四个) 一般都叫他们Tbox 加解密前九轮只需用U替换一下即可 最后一轮还是用Sbox做替换 所以这速度是唰唰的快呀~    这样一来 实现AES的关键问题就是怎么构造 个矩阵U 其中涉及多项式即算问题     ( )多项式加法   多项式加法即按位做异或运算 例如 x + x = XOR = = xD   ( )多项式乘法       GF( n)中的乘法是多项式的模 乘积通过免去进位 再模一个次数为n的不可约多项式约化得到 不可约多项式我理解的和自然数域中的素数相对应 都是有不可再分解的特点 例如下面GF( )的例子        f(x)*g(x) = (x +x)(x +x+ ) mod (x +x+ )            = (x + x + x +x) mod (x +x+ )   系数是二的直接约掉 实际上这里是模 加法            = (x +x) mod (x +x+ )            = x +        Rijindael选用 次不可约多项式x +x +x +x+ 可用元组( )或十六进制数 x B表示 用这个多项式的理由听起来比较有意思 作者说是在一本书上有一堆 次不可约多项式 第一个是 x B就用它了 FT吧 f(x)乘以x+ (或 )的乘法分解成f(x)* + 最后模m(x)约化        f ^= f << ;  //乘 加        if(f & x ) f ^= x B;  //模m(x)约化  在GF( )中的两个多项式f和h的乘法可通过用对数加速 设g(x)为GF( )的一个生成多项式 所谓生成多项式就是数组的 个元素的值就是 的排列 则存在m和n使得f=gm h=gn 则f*h=gm+x mod m(x) 有了这个公式我们就可以把多项式乘法转为加法来算 具体说来就是构造对数表和反对数表    对数表的构造       构造多项式g(x)=x+ 的 个幂存入alog表中      alog[ ] = ;      for (i = ; i < ; i++)              j = (alog[i ] << ) ^ alog[i ]; //x* =x* +         if ((j & x ) != ) // 如果超过 需要约化         j ^= ROOT;        alog[i] = j;            在log表中存放对底g(x)的对数      for (i = ; i < ; i++)          log[alog[i]] = i;  再构造alog和log之后 乘法运算可以一步完成alog[ (log[a]+log[b]) % ]   实际上实现多项式乘法的方法有很多种 在msdn搜AES可以查到一篇写c#实现的 它的乘法算法也是一种很经典的方法 用对数表的方法好理解 最重要的是查表速度快      S盒和反向S盒的实现  ( ) 初始化S盒 按升序排列的字节表示 GF( )的所有数 至   ( ) 用alog[ log[x]] 把S盒中每个字节映射为它在GF( )中的逆 被映射为   ( ) 计算那个仿射变换 那个公式很恶心 参看作者的文献 其中的矩阵乘法 可以利用前面DES的技巧 把S盒的每个字节按位分离存放在一个 * 的临时矩阵中再计算乘法   解密用的逆S盒可以用inSbox[Sbox[i] & xFF] = i得到     Tbox的构造       for (t = ; t < ; t++)              s = Sbox[t];        Tbox [t] = mul (s G[ ]);        Tbox [t] = mul (s G[ ]);        Tbox [t] = mul (s G[ ]);        Tbox [t] = mul (s G[ ]);        s = inSbox[t];        Tbox [t] = mul (s iG[ ]);        Tbox [t] = mul (s iG[ ]);        Tbox [t] = mul (s iG[ ]);        Tbox [t] = mul (s iG[ ]);         G矩阵可以在文献中查到 iG是G在GF( )的逆   在加解密过程中 加密用Tbox 解密用Tbox 前 轮用T 最后一轮用Sbox 但是要注意调用顺序 为了实现列混淆 具体顺序参看那个列混淆的公式 cha138/Article/program/Java/Javascript/201311/25421

相关参考

知识大全 AES对称加密例子

AES对称加密例子  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是AES  AES是一种对

知识大全 Java实现通用组合算法

Java实现通用组合算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java实现通用组合算法

知识大全 常见排序算法的java实现

  最近在面试遇到很多排序算法问题总结一下  定义数组如下  [java]  int[]array=newint[];  int[]array=newint[];  首先是插入排序  [java]  

知识大全 JAVA凸包算法

JAVA凸包算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  源码一JarvisMarchja

知识大全 HITS算法Java实现

HITS算法Java实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  HITS算法是重要的链接

知识大全 JAVA垃圾回收算法摘要

JAVA垃圾回收算法摘要  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  垃圾收集的算法分析  j

知识大全 Java通用权限控制算法

Java通用权限控制算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一种常用的权限控制算法的

知识大全 Java扫雷算法

Java扫雷算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  建立一个雷区可以用一个一个的JB

知识大全 Hash算法大全(java实现)

Hash算法大全(java实现)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hash算法有很

知识大全 Java技术进阶 基于Java的IDEA加密算法探讨

Java技术进阶基于Java的IDEA加密算法探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!