仓酷云

标题: JAVA网页编程之现成的class完成crypt算法 [打印本页]

作者: 只想知道    时间: 2015-1-18 11:43
标题: JAVA网页编程之现成的class完成crypt算法
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:算法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确实是将语法简化得很好。
作者: 山那边是海    时间: 2015-1-21 13:23
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 第二个灵魂    时间: 2015-1-30 19:09
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者: 小妖女    时间: 2015-2-6 13:56
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者: 谁可相欹    时间: 2015-2-16 09:20
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者: 乐观    时间: 2015-3-5 03:24
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 仓酷云    时间: 2015-3-11 22:57
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: 兰色精灵    时间: 2015-3-14 21:03
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 因胸联盟    时间: 2015-3-17 00:08
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 飘灵儿    时间: 2015-3-27 13:59
是一种突破用户端机器环境和CPU
作者: 变相怪杰    时间: 2015-4-17 14:39
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 简单生活    时间: 2015-4-21 18:54
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者: 若相依    时间: 2015-4-24 15:20
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 不帅    时间: 2015-5-3 20:20
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 爱飞    时间: 2015-5-4 08:41
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者: 柔情似水    时间: 2015-5-10 13:42
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 冷月葬花魂    时间: 2015-5-12 07:02
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 深爱那片海    时间: 2015-6-18 19:22
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 老尸    时间: 2015-7-12 08:47
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 透明    时间: 2015-7-15 19:09
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者: cool    时间: 2015-12-22 17:44
就力图使之无所不包




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2