当前位置:编程学习 > JAVA >>

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

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

这两句话我没有理解清楚。
1.之前你说的是你加密,对方解密,现在你又说对方加密。。。
2.java加密为什么必须转成string类型? --------------------编程问答-------------------- 是这样子:因为我加密后,对方解密报错。
所以我把我的参数,传给对方,对方加密。
我来比较2者的区别。
java加密后是byte【】类型的,如果我不转成string串,如何传递给对方呢
要求必须encode(加密后的数值)传递给对方。
--------------------编程问答-------------------- 还有一点:我把对方加密后的数值打出来:是一串乱码状的数值。
我自己加密后的byte【】数组,直接打印出来,确实一串字符串。
在这地方我很混乱。
我把双方加密后的数值都进行base64转换,2者的结果是一致的。
但目前不转换的情况下,我不晓得该如何处理了? --------------------编程问答-------------------- 嗯,目前估计是无法解决了,我认为是php端做的程序不兼容。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,