我正在尝试对java中的数据进行AES编码,通过网络发送并在ruby中对其进行解码.
使用基本字符串可以正常工作,但是一旦字符串的长度为16个字节或更多,我就会在解码的ruby字符串的编码中产生垃圾.我想它与填充有关(不确定,因为它影响甚至大小为16的字符串)
我尝试使用PKCS或只是在我的字符串末尾添加空格以匹配确切的长度而没有运气
也有人可以解释为什么我必须在红宝石中做一个"aes-256-cbc"知道我的java代码使用aes 128?在ruby中尝试aes-128-cbc对任何字符串都不起作用
任何帮助是极大的赞赏
这是我的基本代码
Java的
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);
Run Code Online (Sandbox Code Playgroud)
红宝石
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
Run Code Online (Sandbox Code Playgroud)