AES CBC PKCS5Padding Java到Ruby

我在java和ruby之间传递加密数据时遇到了麻烦。 Java => Java工作正常Ruby => Ruby工作正常Ruby => Java工作得很好Java => Ruby不起作用(错误:错误的最终块长度)。

在java中,我使用此代码加密数据,然后将其发布到rails服务器密钥大小

static public synchronized String encryptAesData(Context pContext, String pData, byte[] pKey, byte[] pIv) { Log.d("", "key size  iv size "); //key size  iv size  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); 

在ruby我用

 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 

并获得错误“错误的最终块长度”

关于如何解决这个问题的任何想法?

我怀疑它可能是由使用的填充方案引起的。 PKCS5焊盘具有64位(8字节)块大小,但AES-256-CBC使用16字节块。 因此,尝试在Java端使用PKCS7填充。

上面的代码工作得很好。 问题在于通过post请求发送的base64的编码。