目前我要测试一个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那边的方法解密了么?