我正在尝试对java中的AES数据进行编码,通过网络发送数据并以ruby对其进行解码。
基本字符串可以正常工作,但是一旦字符串的长度为16个字节或更多,我在解码后的红宝石字符串的编码中就会产生垃圾。我猜想它与填充有关(虽然不确定,因为它甚至影响精确大小为16的字符串)
我尝试使用PKCS或只是在字符串的末尾添加空格以匹配确切的长度而没有运气
还可以有人解释为什么我必须在红宝石中执行“ aes-256-cbc”,因为我知道我的Java代码使用aes
128吗?在Ruby中尝试AES-128-CBC对任何字符串都不起作用
任何帮助是极大的赞赏
这是我的基本代码
爪哇
byte[] raw = key.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(str.getBytes());
return new BASE64Encoder().encode(encrypted);
红宝石
def aes_decrypt(key, encrypted)
decipher =OpenSSL::Cipher::Cipher.new("aes-256-cbc")
decipher.decrypt
decipher.padding = 0
decipher.key = key
d = decipher.update(encrypted)
d << decipher.final
logger.debug "email #{d.to_s}"
return d.to_s
end