Ruby 关于 OpenSSL::Cipher 加密相关的问题,有经验的同学请进

hanluner · 2015年08月15日 · 最后由 luikore 回复于 2015年08月17日 · 2642 次阅读

跟别的公司做一个对接,对方只有 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 没有找到相对应的算法。 希望有经验的同学能够给予提示一下。 非常感谢了。

共收到 1 条回复

aes-ecb 就可以 pkcs5padding 是自动选择的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册