javades密钥_des加密的java实现中
DescKeydes=newDescKey(。。。
看到这个问题我脑海中的第⼀个反应是:Java中DES加密的实现什么时候有DescKey这个对象了?然后我试着⽤Eclipse写个Java程序,发现确实没有DescKey这个对象…
经过进⼀步搜索,我似乎到了这个问题的来源,以及DescKey这个对象的来源了。我想,提问的朋友引⽤的是来⾃CSDN中cuiran撰写的⼀段程序吧?⽹页链接如下:试问⽤DES加密解密是否安全。因为这⾥⾯出现了提问朋友涉及到的DescKey这个类,同时这个类其中的⼀个构造函数设置的密码也为"bjwpn"。
所以呢,希望提问的朋友能够把源代码的来源告诉⼤家,⽅便⼤家帮助你呀~
=====================我是解决问题的分割线============================
其实这个问题如果仔细阅读源代码的话是能够解决的,setKey()这个函数本⾝也是作者撰写的,其源代码是这样的:
public void setKey(String strKey) {
try{
KeyGenerator _generator = Instance("DES");
_generator.init(new Bytes()));
this.key = _ateKey();
_generator = null;
} catch (Exception e) {
throw new RuntimeException("Error initializing SqlMap class. Cause: " + e);java源代码加密
}
}
实际上,能够回答提问朋友问题的2⾏代码为:
_generator.init(new Bytes()));
this.key = _ateKey();
这2⾏代码的意思是,将strKey转换成Byte数组,然后以这个数组作为随机数的种⼦,初始化KeyGenerator的实例_generator。然后,⽤_generator产⽣⼀个秘钥,并传递给key变量。
所以,实际上传进来的诸如"2222",或者"bjwpn"等字符串,都先转化为Byte数组,然后作为随机数⽣成器的种⼦,产⽣随机数。由于真正的64bit秘钥是_generator⽤种⼦产⽣的,_generator本⾝保证了产⽣密钥的长度合法性。同时,由于加密解密使⽤了相同的字符串作为_generator的种⼦,引起其产⽣的密钥也是相同的,这就保证了算法解密的正确性。
总的来说呢,还是希望提问的朋友能够细致地读⼀读源代码啦。密码学中密钥长度的合法性⼀般都是作为密码算法的前提条件。⽽⼀般正确产⽣密钥的⽅法都是⽤随机数⽣成器+种⼦的形式,或者是⽤Hash+截取合法长度的形式产⽣的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论