DES加密算法java实现(核⼼算法+源代码)
其实有了前⼀篇⽂章做为基础之后,要实现DES算法就是很容易的事了。
不过为了是⾃⼰不过于闭门造车,我还是从⽹上了源代码,有⽤java写的,有⽤C++写的,不过所有代码貌似都是⼀样的。为啥说是⼀样的呢?⼀开始写⼀个类,然后把所有的⽅法往类⾥⾯添,额,我猜测如果不是作者功⼒很⾼的话,很难⼀次就把这个给实现了。并且如果读者功⼒不是很⾼的话(譬如说我这样的),也是很难理解其中的调⽤关系的。还有⼀点值得⼀提的是⽹上流传的⽅法似乎都是可以直接对⽂本加密的,所以对于想研究算法的⼈来说,这⽆疑是个悲剧,你想呀,本来你想知道1+1=?,我告诉你说1+1+537674-
637674+100000=2。这很纠结的。
由以上原因可以得出,我这⾥只是简单的把核⼼算法写了⼀下,如果⼤家要⽤它来加解密的话,需要⾃⼰扩展。当然,我也会继续扩展的。好了,说算法,因为⽤的java实现,为了不⾄于写的时候乱了⼿脚,先把类图整理出来,然后就着图来说:
可以看到,我⼀共是分了三个类,⼀个接⼝。IConst接⼝中放的都是置换表。DESFunction类其实就是前篇⽂章的⼀个实现,可以说是DES 基础⽅法类,⾥⾯包含DES实现的基本算法。DES类就是简单的调
java源代码加密⽤了⼀下DESFunction类,组合其中的⽅法进⾏加密解密,其实DES中的两个⽅法decryption()和encryp()完全可以写成⼀个,因为其中的代码⼏乎是完全⼀样,不过为了分析⽅便,我还是给分开了写了。
关于这个貌似就这么多要说的了,分析好了之后其实很容易。因为源码太长了,所以直接打包上传到空间了,⼤家⾃⾏下载,这⾥只贴出DES类的源码,因为这个应该是⽐较重要吧。
这⾥⾯L0[][]和R0[][]这个⼆维数组⽤的不太恰当,⽐较浪费空间,因为L0[i]和R0[i]只需要负责推导出L0[i+1]和R[i+1]就可以了,后⾯就不会再⽤到L0[i]和R0[i]了,这⾥⽤递归应该更好⼀点。不过这样思考起来更直观⼀点。
最后⽤书上的例⼦测试了⼀下,可以正常加解密。如果其中还有问题的话欢迎⼤家提醒。
这是整个⼯程的打包,我⽤的是eclipse。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论