9999:谁有c++版des加密源代码 可以跟java版des加密库匹配 可以互相加解密

问题描述

9999:谁有c++版des加密源代码可以跟java版des加密库匹配可以互相加解密急需:万分感谢!本人在网上已经找了很多个版本,都无法跟java版des库加密出来的结果一致。最好的一个版本是:(40字节的明文(如:100@05963010591062666@013001791717991233)8位的密钥)c++加密出来密文是40个字节。java加密出来的密文是48个字节。前40个字节都是一致的。java加密调用代码如下:【DESKeySpecdks=newDESKeySpec(rawKey);SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");SecretKeysecretKey=keyFactory.generateSecret(dks);javax.crypto.Ciphercipher=Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE,secretKey,sr);bytedata[]=str.getBytes("UTF8");byteencryptedData[]=cipher.doFinal(data);】这几天来从网上搜到的相关信息如下:【在linux下用openssl库的des算法加密 与 在windows下用java自带库的des算法加密,得到的密文最后8个字节不一样.DES算法是8字节对齐的,也就是说当明文不是8字节的倍数时,算法会自动补齐. 大家有谁知道c与java中的des算法补齐的原则吗?已经解决了,是双方调用的时候使用的策略不一样.加密算法一般是根据块加密的,比如8字节,16,32字节对齐。好久没接触了,DES好像是56有效位+8位吧。当加密的最后一个分片大小不够对齐的时候,则会采用一个默认字符来补齐。比如使用“空格”来补齐。而不同的库可能使用的补齐字符不相同,有些可能使用空格,有些可能使用0,这样一来,相当于加密的字符串已经不同了,所以最后的加密结果也会不同。所以你需要先确定两个库使用的补齐字符是相同的另外解密的时候,因为加密后的结果都是按块对齐的,所以不需要再次对齐,但是解密后的结果有可能是加了补齐字符的,你可以通过计算md5看看是否存在这个情况,如果存在的话,则你还需要将后面补齐的字符去掉。是padding的方式不同,两边约定一种即可。现在想在java和C++之间通信,通信的数据用DES算法加密,java用的是JCE,C++端用的是openssl库的des算法遇到的问题问题是,如果加密数据的位数不是8的倍数的话用Cipherc1=Cipher.getInstance("DES/ECB/PKCS5Padding");加密出来的数据和C++端加密出来的数据不一致,但不会报错用Cipherc1=Cipher.getInstance("DES/ECB/NOPADDING");的时候如果加密数据的位数不是8的倍数的话会报错,是8的倍数的话,加密出来的数据就和C++端的一致了。请问有什么方法,加密数据的位数可以不是8的倍数,而且加密出来的数据能和C++一致呢?Java写DES一般用现成的类库,而C++来完成加密算法工作都是用openssl库来实现的。openssl库调用不算很难,编译网上也有操作流程。当不同语言实现加密解密操作的时候,注意一下反馈模式和填充模式就行。常用的反馈模式是ECB和CBC,你这套代码是用的ECB就是无反馈模式,这个就可以不用考虑了。而填充模式标准的填充方法是pkcs#5标准,如果按照这种标准填充的,那什么语言只要数据对应,都没问题,因为算法的实现是相同的。JAVA的DES算法可以指定加密的模式和填充方式,如果不指定,则默认的就是ECB加密模式和PKCS#5填充方式】

解决方案

解决方案二:
该回复于2011-04-02 10:57:40被版主删除
解决方案三:
在Java中的DES默认是DES/ECB/PKCS5Padding的。因此Cipher.getInstance("DES");与Cipher.getInstance("DES/ECB/PKCS5Padding");是一样的。由于DES是块加密对称算法,因此,在NoPadding模式下明文的字节长度必须是8的倍数,否则会报错。如果有填充模式的话,会自动将明文填充到8的倍数。根据规范在填充模式下,DES密文的长度为:(N/8)*8+8N为原文字节长度/为整除

时间: 2024-10-31 13:46:45

9999:谁有c++版des加密源代码 可以跟java版des加密库匹配 可以互相加解密的相关文章

两种JavaScript的AES加密方式(可与Java相互加解密)_javascript技巧

由于JavaScript属于弱类型脚本语言,因此当其与强类型的后台语言进行数据交互时会产生各种问题,特别是加解密的操作.本人由于工作中遇到用js与Java进行相互加解密的问题,在网上查了很多资料及代码段,均无法解决.后总结多篇文档内容终于找到解决办法,现记录与此: 下面给大家介绍两种JavaScript的AES加密方式,具体详情如下所示: 第一种:加解密时需要秘钥(key)和秘钥偏移量(iv)的情况,在线验证地址:http://www.seacha.com/tools/aes.html //该方

加密-求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该

问题描述 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 解决方案 加密算法的强度不是取决于算法是否公开,而是取决于算法本身在数学上是否有解,以及密钥的强度. 所以aes这种工业级的加密算法,在相当的时间和应用范围内肯定是没有问题的. 解决方案二: 对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密

des 加解密-DES加密不一致问题,求大神解决

问题描述 DES加密不一致问题,求大神解决 各位大神 小弟在做一个文件传输项目 对方系统用的是c#写的des加解密算法 密钥:Bank2014 加密偏移量:Bank2014 加密模式:CipherMode.CBC.PaddingMode.PKCS5 块长度:64 文件编码:GBK 小弟这边用的是c写的加解密算法我就只设置了密钥:Bank2014 代码是参照大赛写的 位置在:http://www.iteye.com/topic/478024 目前的问题就是对方公司加密出来的文件跟我加密出来的文件不

java 的DES加密问题,请大家解决一下,就是输出密文只有15位,还有帮我修改一下代码,可以达到每轮输出,谢谢好心的人了啊。

问题描述 java的DES加密问题,请大家解决一下,就是输出密文只有15位,还有帮我修改一下代码,可以达到每轮输出,谢谢好心的人了啊.importjavax.swing.*;importjava.awt.event.*;importjava.awt.*;[size=10px]classmyframeextendsJFrameimplementsActionListener{JTextAreainput;JTextAreamiyue;JTextAreaoutput;JLabell1,l2,l3;J

java版的word2vec如何使用。源代码已经有了。细节如下

问题描述 java版的word2vec如何使用.源代码已经有了.细节如下 word2vec源代码 我已经在linux下获得了源代码,http://mattmahoney.net/dc/text8.zip 下载了一个文件text8 接下来该如何跑程序? 解决方案 这个我也不知道,如有解决方法,麻烦分享一下哈,谢谢 解决方案二: 这个我也不知道,如有解决方法,麻烦分享一下哈,谢谢 解决方案三: 这个我也不知道,如有解决方法,麻烦分享一下哈,谢谢

asp.net实现的MD5加密和DES加解密算法类完整示例_实用技巧

本文实例讲述了asp.net实现的MD5加密和DES加解密算法类.分享给大家供大家参考,具体如下: #region MD5算法 public string md5(string str, int code) { if (code == 32) //32位加密 { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower(); } else /

兼容PHP和Java的des加密解密代码分享_php实例

php代码: <?php class DES { var $key; var $iv; //偏移量 function DES($key, $iv=0) { $this->key = $key; if($iv == 0) { $this->iv = $key; } else { $this->iv = $iv; } } //加密 function encrypt($str) { $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MO

加密源代码脚本

提示:您可以先修改部分代码再运行 加密源代码脚本 页面源代码加密   制作一个特别好的网页,想放到网上,又不想让别人见到页面源代码,怎么办?是不是想加密页面源代码脚本,这里提供的页面源代码加密法,使你仅用一"复制""粘贴"一下,就可以轻松加密你的页面源代码,快试一下吧!方法如下:   将你的页面源代码粘贴在下面的文本框内,要包括所有的标签,例如html , head, body等. 提示:您可以先修改部分代码再运行

如何用vs2013在源代码视图,选择“page”的load事件,2008版可以直接选择但在2013版找不到哦

问题描述 如何用vs2013在源代码视图,选择"page"的load事件,2008版可以直接选择但在2013版找不到哦 解决方案 解决方案二:试试查看组件编辑器,在aspx文件上点右键选择,然后到属性窗口里面点闪电图标解决方案三:如果找不到,你可以在页面对象类的实例化方法里自己注册.例如public页面class名称(){this.Load+=这里按Tab键} 解决方案四:不过,实际上只要有AutoEventWireup="true",实际上你的Page_Load方