马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:算法packagecom.elong.application.encrypt;<br>
publicclassCrypt<br>
{<br>
staticintsub[]=newint[48];<br>
<br>
//TABLES<br>
/*Expansiontable(32to48)*/<br>
intE_p[]={<br>
32,1,2,3,4,5,4,5,6,7,8,9,<br>
8,9,10,11,12,13,12,13,14,15,16,17,<br>
16,17,18,19,20,21,20,21,22,23,24,25,<br>
24,25,26,27,28,29,28,29,30,31,32,1<br>
};<br>
<br>
/*PermutationChoice1forsubkeygeneration(64/56to56)*/<br>
intPC1_p[]={<br>
57,49,41,33,25,17,9,1,58,50,42,34,26,18,<br>
10,2,59,51,43,35,27,19,11,3,60,52,44,36,<br>
63,55,47,39,31,23,15,7,62,54,46,38,30,22,<br>
14,6,61,53,45,37,29,21,13,5,28,20,12,4<br>
};<br>
<br>
/*PermutationChoice2forsubkeygeneration(56to48)*/<br>
intPC2_p[]={<br>
14,17,11,24,1,5,3,28,15,6,21,10,<br>
23,19,12,4,26,8,16,7,27,20,13,2,<br>
41,52,31,37,47,55,30,40,51,45,33,48,<br>
44,49,39,56,34,53,46,42,50,36,29,32<br>
};<br>
<br>
/*Numberofrotationsfortheiterationofkeyscheduling*/<br>
/*Theconceptofatableheredoesntfitourbehavioralmodel*/<br>
/*Thiswillbelogicinourfinaldesign*/<br>
intkeyrots[]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};<br>
<br>
/*Selectionblocks<br>
*Thereare8sblocks,eachofwhichisreferencedbya2bitvalue<br>
*whichpickstherow,anda4bitvaluewhichpicksthecolumn<br>
*Thisnumberisthenthe4bitoutputforthatselectblock<br>
*/<br>
intsblocks[][][]={<br>
{{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},<br>
{0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},<br>
{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},<br>
{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}<br>
},<br>
<br>
{{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},<br>
{3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},<br>
{0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},<br>
{13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}<br>
},<br>
<br>
{{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},<br>
{13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},<br>
{13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},<br>
{1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}<br>
},<br>
<br>
{{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},<br>
{13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},<br>
{10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},<br>
{3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}<br>
},<br>
<br>
{{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},<br>
{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},<br>
{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},<br>
{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}<br>
},<br>
<br>
{{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},<br>
{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},<br>
{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},<br>
{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}<br>
},<br>
<br>
{{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},<br>
{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},<br>
{1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},<br>
{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}<br>
},<br>
<br>
{{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},<br>
{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},<br>
{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},<br>
{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}<br>
}<br>
};<br>
<br>
/*PermutationPforaftersblocks*/<br>
intP_p[]={<br>
16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,<br>
2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25<br>
};<br>
<br>
/*InversepermutationofIPforend<br>
*Temporary-thetruebehaviorwillbeimplementedinashiftoutregister<br>
*(Lookatthepatternobviousinan8x8layout)<br>
*/<br>
intIPinv_p[]={<br>
40,8,48,16,56,24,64,32,<br>
39,7,47,15,55,23,63,31,<br>
38,6,46,14,54,22,62,30,<br>
37,5,45,13,53,21,61,29,<br>
36,4,44,12,52,20,60,28,<br>
35,3,43,11,51,19,59,27,<br>
34,2,42,10,50,18,58,26,<br>
33,1,41,9,49,17,57,25<br>
};<br>
<br>
//CODE<br>
privatevoidpr_bits(int[]s,intamt)<br>
{<br>
amt/=8;<br>
for(inti=0;i<amt;i++)<br>
{<br>
intx=0;<br>
for(intj=0;j<8;j++)<br>
x|=s[i*8+j]<<(7-j);<br>
Integerinteg=newInteger(x);<br>
System.out.print(integ.toString(x,16)+"");<br>
}<br>
System.out.println();<br>
};<br>
<br>
privatevoidpermute(int[]by,intamt,int[]in,int[]out)<br>
{<br>
for(;--amt>=0;)<br>
out[amt]=in[by[amt]-1];<br>
};<br>
<br>
privatevoiddo_sblocks(int[]in,int[]out)<br>
{<br>
for(inti=0;i<8;i++)<br>
{<br>
intval=sblocks[i]<br>
[in[i*6]<<1|in[i*6+5]]<br>
[in[i*6+1]<<3|<br>
in[i*6+2]<<2|<br>
in[i*6+3]<<1|<br>
in[i*6+4]<<0];<br>
out[i*4+0]=val>>3&1;<br>
out[i*4+1]=val>>2&1;<br>
out[i*4+2]=val>>1&1;<br>
out[i*4+3]=val>>0&1;<br>
}<br>
};<br>
<br>
privateintascii_to_bin(charc)<br>
{<br>
if(c>=a)return(c-59);<br>
if(c>=A)return(c-53);<br>
return(c-.);<br>
};<br>
<br>
privatecharbin_to_ascii(intc)<br>
{<br>
if(c>=38)return(char)(c-38+a);<br>
if(c>=12)return(char)(c-12+A);<br>
return(char)(c+.);<br>
};<br>
<br>
privatevoidload_salt(int[]saltmask,char[]salt)<br>
{<br>
inttot=ascii_to_bin(salt[0])|(ascii_to_bin(salt[1])<<6);<br>
for(inti=0;i<12;i++)<br>
saltmask[i]=tot>>i&1;<br>
};<br>
<br>
privatevoiddo_salt(int[]bits,int[]saltmask)<br>
{<br>
for(inti=0;i<12;i++)<br>
if(saltmask[i]!=0)<br>
{<br>
intt=bits[i];<br>
bits[i]=bits[24+i];<br>
bits[24+i]=t;<br>
}<br>
};<br>
<br>
privatevoidload_key(int[]ikey,char[]password)<br>
{<br>
inttmp[]=newint[64];<br>
<br>
for(inti=0;i<8;i++)<br>
for(intj=0;j<8;j++)<br>
tmp[i*8+j]=(password[i]>>(6-j))&1;<br>
permute(PC1_p,56,tmp,ikey);<br>
};<br>
<br>
privatevoidsubkey(int[]ikey,intiter)<br>
{<br>
introts=keyrots[iter];<br>
<br>
inttmp0l=ikey[0];<br>
inttmp1l=ikey[1];<br>
inttmp0r=ikey[28];<br>
inttmp1r=ikey[29];<br>
for(inti=0;i<28-rots;i++)<br>
{<br>
ikey[i]=ikey[i+rots];<br>
ikey[28+i]=ikey[28+i+rots];<br>
}<br>
if(rots==2)<br>
{<br>
ikey[26]=tmp0l;<br>
ikey[27]=tmp1l;<br>
ikey[54]=tmp0r;<br>
ikey[55]=tmp1r;<br>
}<br>
else<br>
{<br>
ikey[27]=tmp0l;<br>
ikey[55]=tmp0r;<br>
}<br>
<br>
permute(PC2_p,48,ikey,sub);<br>
};<br>
<br>
privatevoidxor(int[]src1,int[]src2,intindex,intnum)<br>
{<br>
for(inti=0;i<num;i++)<br>
src1[i]=(src1[i]^src2[index+i])&1;<br>
};<br>
<br>
privatevoidprint_bits(int[]s,intamt)<br>
{<br>
for(inti=0;i<amt;i++)<br>
System.out.print(""+s[i]);<br>
System.out.println("");<br>
};<br>
<br>
privatevoiddo_f(int[]in,intindex,int[]out,intiter,int[]ikey,int[]saltmask)<br>
{<br>
inttmp48[]=newint[48],tmp32[]=newint[32],skey[];<br>
<br>
for(inti=0;i<32;i++)<br>
tmp32[i]=in[i+index];<br>
permute(E_p,48,tmp32,tmp48);<br>
do_salt(tmp48,saltmask);<br>
<br>
subkey(ikey,iter);<br>
skey=sub;<br>
xor(tmp48,skey,0,48);//Goed<br>
do_sblocks(tmp48,tmp32);<br>
permute(P_p,32,tmp32,out);<br>
};<br>
<br>
privatechar[]mycrypt(char[]password,char[]salt)<br>
{<br>
intbits[]=newint[64];<br>
intoutl[]=newint[32];<br>
intoutr[]=newint[32];<br>
intdone[]=newint[66];//Inc-codearray-sizewas64!?!<br>
intikey[]=newint[56];<br>
intsaltmask[]=newint[12];<br>
char[]answer=newchar[14];<br>
<br>
for(inti=0;i<64;i++)<br>
bits[i]=0;<br>
load_key(ikey,password);<br>
load_salt(saltmask,salt);<br>
<br>
for(intdess=0;dess<25;dess++)<br>
{<br>
for(intiters=0;iters<16;iters+=2)<br>
{<br>
do_f(bits,32,outl,iters,ikey,saltmask);<br>
xor(outl,bits,0,32);<br>
do_f(outl,0,outr,iters+1,ikey,saltmask);<br>
xor(outr,bits,32,32);<br>
<br>
if(iters!=14)<br>
for(inti=0;i<32;i++)<br>
{<br>
bits[i]=outl[i];<br>
bits[i+32]=outr[i];<br>
}<br>
else<br>
for(inti=0;i<32;i++)<br>
{<br>
bits[i]=outr[i];<br>
bits[i+32]=outl[i];<br>
}<br>
}<br>
}<br>
permute(IPinv_p,64,bits,done);<br>
<br>
answer[0]=(char)salt[0];<br>
answer[1]=(char)salt[1];<br>
for(inti=0;i<11;i++)<br>
{<br>
charc=0;<br>
for(intj=0;j<6;j++)<br>
c|=done[6*i+j]<<(5-j);<br>
answer[i+2]=bin_to_ascii(c);<br>
}<br>
returnanswer;<br>
};<br>
<br>
/**<br>
*Thismethoddecodesthegivenpassword<br>
*EncryptionisbasedontheonewayDESencryption<br>
*@returnTheencryptedpassword<br>
*@parampasswdisthepasswordtoencrypt<br>
*@paramsissalt<br>
*/<br>
publicStringdecode(Stringpasswd,Strings)<br>
{<br>
char[]password=newchar[9];<br>
char[]salt=newchar[3];<br>
Stringuitkomst;<br>
<br>
passwd.getChars(0,passwd.length()>=8?8:passwd.length(),password,0);<br>
s.getChars(0,2,salt,0);<br>
<br>
uitkomst=newString().valueOf(mycrypt(password,salt));<br>
return(uitkomst.substring(0,13));<br>
}<br>
<br>
};
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。 |