动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.AvailableSpace 属性.
.Java实现Http服务器之二.
.读锁和写锁的使用.
.JBuilder2005创建开发文档之Java.
.使toString() 的创建自动化.
.使用JSF(Java Server Faces)开.
.通过E-mail共享Java对象.
.J2EE中的业务逻辑和数据库访问决.
.Swing 常用的 Package.
.update 和 saveOrUpdate 项目思路.
.Jdk编译Java程序 - applet.
.驯服Tiger之线程中的默认异常处理.
.漫谈解决Struts分页显示.
.使不能运行的JAR文件可以使用jav.
.用java小程序applet实现无限级树.
.Java基础:如何成为一名Java初级.
.Java编程新手入门:运算符优先级.
.java的关键知识点.
.Java中四种XML解析技术之不完全测.
.Java高级编程:提升JSP应用程序的.

通过 Java 如何实现 AES 密码算法

发表日期:2008-1-5 |



  有关AES的一些理解
  最近很多密码学的书都包含了最新的AES算法,但由于涉及的数学理论比较多,我也只是明白一些能让我实现他的皮毛。
  AES比较牛的地方是速度快,而且明文和密钥的长度可以是128,196,256位,并且可以任意组合,明文和密钥的长度不一定是一样长的。由于采用了模块化设计,算法包含4个步骤:1.字节替换;2.行位移;3.列混淆;4.密钥加法,这些步骤循环10轮。最让我恶心的第10轮的又不一样,没有列混淆。
  强烈建议大家看作者的英文论文和书,其中讲到了一种32位平台的快速实现方法。这种方法根据每一步的数学原理,将4步和为一步,那一大堆公式推倒我就不在这重复了。这种快速实现方法需要构造8个矩阵(加解密各四个),一般都叫他们Tbox。加解密前九轮只需用U替换一下即可,最后一轮还是用Sbox做替换,所以这速度是唰唰的快呀~ 
  这样一来,实现AES的要害问题就是怎么构造8个矩阵U。其中涉及多项式即算问题。
  
  (1)多项式加法
  多项式加法即按位做异或运算。例如0x57 + 0x83 = 01010111 XOR 10000011 = 11010100 = 0xD4。
  (2)多项式乘法
       GF(2n)中的乘法是多项式的模2乘积通过免去进位,再模一个次数为n的不可约多项式约化得到,不可约多项式我理解的和自然数域中的素数相对应,都是有不可再分解的特点。例如下面GF(23)的例子:
       f(x)*g(x) = (x2+x)(x2+x+1) mod (x3+x+1)
            = (x4+2x3+2x2+x) mod (x3+x+1)   系数是二的直接约掉,实际上这里是模2加法
            = (x4+x) mod (x3+x+1)
            = x2+1
       Rijindael选用8次不可约多项式x8+x4+x3+x+1,可用元组(100011011)或十六进制数0x11B表示。用这个多项式的理由听起来比较有意思,作者说是在一本书上有一堆8次不可约多项式,第一个是0x11B就用它了,FT吧。f(x)乘以x+1(或‘03’)的乘法分解成f(x)*2+1,最后模m(x)约化:
       f ^= f << 1;  //乘2加1
       if(f & 0x100) f ^= 0x11B;  //模m(x)约化
  在GF(28)中的两个多项式f和h的乘法可通过用对数加速:设g(x)为GF(28)的一个生成多项式,所谓生成多项式就是数组的256个元素的值就是0-255的排列,则存在m和n使得f=gm,h=gn,则f*h=gm+x mod m(x)。有了这个公式我们就可以把多项式乘法转为加法来算,具体说来就是构造对数表和反对数表
  
  对数表的构造:
     1. 构造多项式g(x)=x+1的255个幂存入alog表中
      alog[0] = 1;
      for (i = 1; i < 256; i++)
      {
        j = (alog[i-1] << 1) ^ alog[i-1]; //x*3=x*2+1
        if ((j & 0x100) != 0) // 假如超过255,需要约化
         j ^= ROOT;
        alog[i] = j;
      }
     2. 在log表中存放对底g(x)的对数
      for (i = 1; i < 255; i++)
          log[alog[i]] = i;
  再构造alog和log之后,乘法运算可以一步完成alog[ (log[a]+log[b]) % 255 ] 。
  实际上实现多项式乘法的方法有很多种,在msdn搜AES可以查到一篇写c#实现的,它的乘法算法也是一种很经典的方法。用对数表的方法好理解,最重要的是查表速度快。
  
  S盒和反向S盒的实现
  (1) 初始化S盒,按升序排列的字节表示 GF(28)的所有数,0至255。
  (2) 用alog[255-log[x]],把S盒中每个字节映射为它在GF(28)中的逆。0被映射为0。
  (3) 计算那个仿射变换,那个公式很恶心,参看作者的文献。其中的矩阵乘法,可以利用前面DES的技巧,把S盒的每个字节按位分离存放在一个256*8的临时矩阵中再计算乘法。
  解密用的逆S盒可以用inSbox[Sbox[i] & 0xFF] = i得到。
  
  Tbox的构造
      for (t = 0; t < 256; t++)
      {
        s = Sbox[t];
        Tbox1[t] = mul4(s, G[0]);
        Tbox2[t] = mul4(s, G[1]);
        Tbox3[t] = mul4(s, G[2]);
        Tbox4[t] = mul4(s, G[3]);
        s = inSbox[t];
        Tbox5[t] = mul4(s, iG[0]);
        Tbox6[t] = mul4(s, iG[1]);
        Tbox7[t] = mul4(s, iG[2]);
        Tbox8[t] = mul4(s, iG[3]);
       }
  G矩阵可以在文献中查到,iG是G在GF(28)的逆。
  在加解密过程中,加密用Tbox1-4,解密用Tbox5-8,前9轮用T,最后一轮用Sbox。但是要注重调用顺序,为了实现列混淆,具体顺序参看那个列混淆的公式。
上一篇:在Java中使用反射分析类结构 人气:683
下一篇:Java 技巧:步入本地方法圣殿的七个步骤 人气:439
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号