我在 java 和 ruby 之间传输加密数据时遇到了麻烦。Java => Java 工作正常 Ruby => Ruby 工作正常 Ruby => Java 工作正常 Java => Ruby 不工作(错误:最终块长度错误)。
在 java 中,我使用此代码加密数据,然后将其发布到 rails server 密钥大小
static public synchronized String encryptAesData(Context pContext, String pData, byte[] pKey, byte[] pIv) {
Log.d("", "key size <" + pKey.length + "> iv size <" + pIv.length + ">"); //key size <32> iv size <16>
AlgorithmParameterSpec paramSpec = new IvParameterSpec(pIv);
SecretKeySpec key = new SecretKeySpec(pKey, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
byte[] encrypted = cipher.doFinal(pData.getBytes());
return Base64.encodeToString(encrypted, Base64.DEFAULT);
在我使用的红宝石中
encrypted_data = Base64.decode64(raw_data)
decipher = OpenSSL::Cipher::AES.new(256, :CBC)
decipher.decrypt
decipher.key = "censored_key".unpack('A*').pack('H*')# decipher.key.size = 32
decipher.iv = "censored_iv".unpack('A*').pack('H*') # decipher.iv.size = 16
plain = decipher.update(encrypted_data) + decipher.final
并得到错误“错误的最终块长度”
关于如何解决这个问题的任何想法?