java – 3DES的手动实现(学术)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 3DES的手动实现(学术),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1925字,纯文字阅读大概需要3分钟。
内容图文
对于我正在学习的课程,我们正在手动实施3DES方案,这在纸上很简单(两个密钥,EDE加密).我选择Java作为实现语言,但是它遇到了如何使用不同的密钥处理加密/解密的问题.尝试应用第二轮时(即使用K2“解密”),我一直收到javax.crypto.BadPaddingException错误.默认的DES Cipher使用PKCS5Padding,我认为这是问题,但我不知道如何解决它.我的加密代码如下(我希望它不是太直接,更少我忽略了一些简单的东西).先感谢您.
关键定义(非常基本,我会改进它,因为我在浏览时看到了一些不同的方法)
KeyGenerator kgen = KeyGenerator.getInstance("DES");
SecretKey sk_1 = kgen.generateKey();
SecretKey sk_2 = kgen.generateKey();
byte[] raw_1 = sk_1.getEncoded();
byte[] raw_2 = sk_2.getEncoded();
spec_1 = new SecretKeySpec(raw_1, "DES"); //key 1
spec_2 = new SecretKeySpec(raw_2, "DES"); //key 2
cipher = Cipher.getInstance("DES"); //standard mode is ECB which is block-by-block w/PKCS5Padding
cipher2 = Cipher.getInstance("DES");
protected byte[] get3DESEncryption(byte[] plaintext) throws Exception{
byte[] output = new byte[plaintext.length];
System.out.println("output len init: " + output.length);
cipher.init(Cipher.ENCRYPT_MODE, spec_1);
cipher2.init(Cipher.DECRYPT_MODE, spec_2);
//first encryption round, key 1 used
output = cipher.doFinal(plaintext);
//second "encryption" round, key 2 used but decrypt run
output = cipher2.doFinal(output);
//third encryption round, key 1 used
output = cipher.doFinal(output);
//return ciphertext
return output;
}
解决方法:
问题是你不应该在第二(解密)和第三(加密)步骤上使用任何填充.当您实际应用EDE时,您应该只填充纯文本.
A transformation is of the form:
“algorithm/mode/padding” or “algorithm” (in the latter case,
provider-specific default values for the mode and padding scheme are
used).
所以,你应该明确告诉它不要在cipher2&上使用填充. cipher3(你还没有创建后者).
因此,您应该有三个密码对象:
> cipher1 DES / ECB / PKCS5Padding
> cipher2 DES / ECB / NoPadding
> cipher3 DES / ECB / NoPadding
[额外提示]
对于解密,您应该以不同方式初始化密码,您也应该对密码进行重新排序.
内容总结
以上是互联网集市为您收集整理的java – 3DES的手动实现(学术)全部内容,希望文章能够帮你解决java – 3DES的手动实现(学术)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。