繁体   English   中英

AES CBC PKCS5将Java填充为Ruby

[英]AES CBC PKCS5Padding Java to 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 <" + 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  

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

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

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

上面的代码可以正常工作。 问题出在通过发布请求发送的base64的编码中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM