java des加密 DES/CBC/PKCS5Padding 与php 解密

robin嘟嘟 2013-05-08 02:38:42
目前我要测试一个php写的接口,文档中提供:
DES加密解密工作模式、填充方式约定:
 工作模式:CBC
 填充方式:PKCS7
java中只有pkcs5,因此我才用DES/CBC/PKCS5Padding这个方式进行加密,采用对方提供的key和iv,要求加密后并且进行encode转码,提交。但是加密提交后后,对方解密返回:数据解码失败。
请问这最可能是由于什么原因造成?
得到对方加密的数据,经过decode解码后,发现是二进制。
而java进行加密后是byte,必须要转为string类型,请问这块如何处理?

// 加密数据
public static String encrypt(String message, String key, String ivStr)
throws Exception {

Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] byteMi = cipher.doFinal(message.getBytes());
return new String(byteMi);

}
...全文
770 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
咖啡馆之歌 2015-04-24
  • 打赏
  • 举报
回复
请问大侠,我也是做加密 现在的问题是,Java端加密结果跟php端加密结果长度完全不一致是怎么回事
robin嘟嘟 2013-05-09
  • 打赏
  • 举报
回复
还有一点:我把对方加密后的数值打出来:是一串乱码状的数值。 我自己加密后的byte【】数组,直接打印出来,确实一串字符串。 在这地方我很混乱。 我把双方加密后的数值都进行base64转换,2者的结果是一致的。 但目前不转换的情况下,我不晓得该如何处理了?
robin嘟嘟 2013-05-09
  • 打赏
  • 举报
回复
是这样子:因为我加密后,对方解密报错。 所以我把我的参数,传给对方,对方加密。 我来比较2者的区别。 java加密后是byte【】类型的,如果我不转成string串,如何传递给对方呢 要求必须encode(加密后的数值)传递给对方。
robin嘟嘟 2013-05-09
  • 打赏
  • 举报
回复
嗯,目前估计是无法解决了,我认为是php端做的程序不兼容。
十橙心橙意 2013-05-08
  • 打赏
  • 举报
回复
得到对方加密的数据,经过decode解码后,发现是二进制。 而java进行加密后是byte,必须要转为string类型,请问这块如何处理? 这两句话我没有理解清楚。 1.之前你说的是你加密,对方解密,现在你又说对方加密。。。 2.java加密为什么必须转成string类型?
十橙心橙意 2013-05-08
  • 打赏
  • 举报
回复
你测试过自己加密,然后按照php那边的方法解密了么?

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧