跟别的公司做一个对接,对方只有 java 版本 java 的代码如下:
public static final String KEY_ALGORITHM = "AES";
public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
/**
* 转换密钥
*/
public static Key toaesKey(byte[] key) throws Exception {
return new SecretKeySpec(key, KEY_ALGORITHM);
}
public static String aesencrypt(Integer wxappid,String wxno,String wxname,String userid,String userpetname ,String usericon, String key) throws Exception {
if(key.length() == 15){
key = key + "_";
}
String data = "wxno=" + wxno + "&wxname=" + wxname + "&userid=" + userid + "&userpetname=" + URLEncoder.encode(userpetname, "utf-8") + "&usericon="+ URLEncoder.encode(usericon, "utf-8");
Key k = toaesKey(key.getBytes("UTF8")); // 还原密钥
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); // 实例化Cipher对象,它用于完成实际的加密操作
cipher.init(Cipher.ENCRYPT_MODE, k); // 初始化Cipher 对象,设置为加密模式
String str = new String(org.apache.commons.codec.binary.Base64.encodeBase6 4(cipher.doFinal(data.getBytes())),"UTF-8"); // 执行加密操作。加密后的结果通常都会用 Base64 编码进行传输
str += "_" + wxappid;
return URLEncoder.encode(str, "utf-8");
}
试了几次与他们的加密结果不一致,主要可能是『AES/ECB/PKCS5Padding』这个在 Ruby 中 OpenSSL::Cipher 没有找到相对应的算法。 希望有经验的同学能够给予提示一下。 非常感谢了。