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

J2EE 码拜 9年前 (2015-05-10) 1390次浏览 0个评论
 

目前我要测试一个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);
         
    }
40分
你测试过自己加密,然后按照php那边的方法解密了么?
得到对方加密的数据,经过decode解码后,发现是二进制。
而java进行加密后是byte,必须要转为string类型,请问这块如何处理?

这两句话我没有理解清楚。
1.之前你说的是你加密,对方解密,现在你又说对方加密。。。
2.java加密为什么必须转成string类型?

是这样子:因为我加密后,对方解密报错。
所以我把我的参数,传给对方,对方加密。
我来比较2者的区别。
java加密后是byte【】类型的,如果我不转成string串,如何传递给对方呢
要求必须encode(加密后的数值)传递给对方。
还有一点:我把对方加密后的数值打出来:是一串乱码状的数值。
我自己加密后的byte【】数组,直接打印出来,确实一串字符串。
在这地方我很混乱。
我把双方加密后的数值都进行base64转换,2者的结果是一致的。
但目前不转换的情况下,我不晓得该如何处理了?
嗯,目前估计是无法解决了,我认为是php端做的程序不兼容。
请问大侠,我也是做加密 现在的问题是,Java端加密结果跟php端加密结果长度完全不一致是怎么回事

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java des加密 DES/CBC/PKCS5Padding 与php 解密
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!