预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
publicclassIDEA{private)yte[]Encrypt(byte[]bytekey,byte[]inputBytes,booleanflag){//每一轮加密函数byte[]encryptCode=newbyte[8];int[]key=get_subkey(flag,bytekey);//分解子密钥encrypt(key,inputBytes,encryptCode);//进行加密操作returnencryptCode;//返回加密数据}privateintbytesToInt(byte[]inBytes,intstartPos)〃二进制数组转换为字节return((inBytes[startPos]<<8)&0xff)+(inBytes[startPos+1]&0xff);privatevoidintToBytes(intinputInt,byte[]outBytes,intstartPos){//字节转换为二进制数组outBytes[startPos]=(byte)(inputInt>〉〉8);outBytes[startPos+1]=(byte)inputInt;}privateintx_multiply_y(intx,inty)(//乘法运算if(x==0){x=0x101—y;}elseif(y==0){x=0x101—x;}else{inttmp=x*y;y=tmp&0xffff;x=tmp>〉>16;x=(y—x)+((y<x)?1:0);}returnx&0xffff;)privatevoidencrypt(int[]key,byte[]inbytes,byte[]outbytes)(//对称算法,加解密用一个函数操作intk=0;inta=bytesToInt(inbytes,0);//将64位明文分为四个子块intb=bytesToInt(inbytes,2);intc=bytesToInt(inbytes,4);intd=bytesToInt(inbytes,6);for(inti=0;i=x_multiply_y(a,+=key[k++];&=Oxffff;+=key[k++];&=Oxffff;=x_multiply_y<8;key(d,i++){//八轮循环开始[k++]);〃步骤(1)//(2)//(3)key[k++]);//(4)inttmp1=b;inttmp2=c;cA=a;//(5)bA=d;//(6)c=x_multiply_y(c,key[k++]);//(7)b+=c;//(8)b&=0xffff;b=x_multiply_y(b,keyc+=b;c&=0xffff;aA=b;dA=c;bA=tmp2;cA=tmpl;)intToBytes(x_multiply_y(a,为二进制数组下一轮使用intToBytes(c+key[k++],intToBytes(b+key[k++][k++]);//(9)//(10)//(11)//(12)//(13)//(14)key[k++]),outbytes,outbytes,2);,outbytes,4);0);〃将一轮循环后的子块转化intToBytes(x_multiply_y(d,key[k]),outbytes,6);privateint[]encrypt_subkey(byte[]byteKey){//加密时子密钥产生过程int[]key=newint[52];if(byteKey.length〈16){byte[]tmpkey=newbyte[16];System.arraycopy(byteKey,0,tmpkey,tmpkey.length—byteKey。length,byteKey。length);byteKey=tmpkey;}for(inti=0;i<8;i++){key[i]=bytesToInt(byteKey,i*2);}for(intj=8;j〈52;j++){if((j&0x7)〈6){key[j]=(((key[j—7]0xffff;&0x7f)〈<9)I(key[j—6]>>7))&}elseif((j&0x7)key[j]=(((key[j-7==6)(]&0x7f)<<9)I(key[j-14]>>7))&0xffff;}else(key[j]=(((key[j—15]&0x7f)〈〈9)I(key[j—14]>>7))&0xffff;))returnkey;)privateintfun_a(inta){//解密子