자바에서 AES 인코딩 데이터를 네트워크를 통해 보내고 루비에서 디코딩하려고합니다.AES 자바 인코딩, 루비 디코딩
기본 문자열로 잘 작동하지만 일단 문자열의 길이가 16 바이트 이상이면 디코딩 된 루비 문자열의 인코딩에 쓰레기가 생깁니다. 나는 패딩과 관련이 있다고 생각한다. (정확한 크기가 16 인 문자열에도 영향을 미치기 때문에 확실하지 않다.)
PKCS를 사용하거나 정확한 길이와 일치하도록 문자열의 끝에 공백을 추가하려고 시도했다. 행운
또한 왜 내가 "aes-256-cbc"루비 내 Java 코드를 사용하여 알면서 128 할 설명 할 수 있습니까? 시도 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
위대한 설명! –