欢迎来到天天文库
浏览记录
ID:39464366
大小:189.00 KB
页数:6页
时间:2019-07-03
《AES加解密的JAVA实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、实验目的1、深入理解AES加解密算法;2、用JAVA编程完成一个明文分组的加密和解密,其中密钥是十六进制,长度为128比特(32个16进制数),并且进行加密后,能够进行正确的解密。二、实验条件1、熟悉JAVA开发环境,能熟练运用JAVA进行程序编写;2、掌握AES加解密算法知识,了解其算法原理;3、安装了JAVA环境的计算机。三、实验背景随着对称密码的发展,3DES用软件实现速度相对较慢,它使用的64位分组长度显得不够高效和安全的缺点使得需要一种新的高级加密标准来替代它。AES的全称是AdvancedEncryptionStandard,即高级加密标准。该项目由美国国家标准技术
2、研究所(NIST)于1997年开始启动并征集算法,在2000年确定采用Rijndael作为其最终算法,并于2001年被美国商务部部长批准为新的联邦信息加密标准(FIPSPUB197),该标准的正式生效日期是2002年5月26日。2000年10月2日,NIST对Rijndael做出了最终评估。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(pe
3、rmutations)和替换(substitutions)输入数据。四、实验原理1、AES加密模块字节替代:通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节;行移位:将矩阵中的每个横列进行循环式移位;列混合:为了充分混合矩阵中各个直行的操作,这个步骤使用线性转换来混合每行内的四个字节;轮密钥加:矩阵中的每一个自己都与该次循环的子密钥做XOR逻辑运算;每个子密钥有密钥生成方案产生;最后一个加密循环中省略列混合步骤,而以另一个轮密钥加取代。2、AES解密模块:逆行移位:与行移位操作相反;逆字节替代:与字节替代一样,只是查表操作变为逆S盒;轮密钥加:与加密算法中一样;逆
4、列混合:与列混合操作一样,只是多项式不同;最后一个解密循环中省略逆列混合步骤,以另一个轮密钥加取代。3、AES密钥扩展模块首先初始密钥按照矩阵列进行分组,前4列初始密钥记为K0,K1,K2,K3,那么新的列Ki递归如下:1)如果Ki中,i不是4的倍数,那么i列由如下等式确定:Ki=K(i-4)XORK(i-1)2)如果ki中,i是4的倍数,那么i列由如下等式确定:Ki=K(i-4)XORT[K(i-1)]其中是4的倍数的转换形式,按以下方式实现:a将K(i-1)循环左移位,每次一个字节,如abcd变成bcda;b将这4个字节作为S盒的输入,输出新的4个字节efgh;c计算一轮的常量
5、r(i)=2(i-4)/4;d这样生成转换后的列:[eXORr(i),f,g,h]。第i轮的轮密钥组成了列K4i,K(4i+1),K(4i+2),K(4i+3)。五、程序设计1、程序开发平台及工具平台:windowsxp软件版本:jdk1.6.0_212、源代码importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;publicclassAES{privatefinalstaticStrin
6、galgorithm="AES";privatestaticStringasHex(bytebuf[]){StringBufferstrbuf=newStringBuffer(buf.length*2);for(inti=0;i7、c.length()<1)returnnull;byte[]encrypted=newbyte[src.length()/2];for(inti=0;i
7、c.length()<1)returnnull;byte[]encrypted=newbyte[src.length()/2];for(inti=0;i
此文档下载收益归作者所有