2017-04-04 62 views
2

本主題的堆棧溢出有很多線程,並且始終使用相同的解決方案,但這些方法對我無效。我正在尋找一種方法來解密值byte[]加密並返回byte[] decodedBytes。密碼功能:錯誤的最終塊長度Android Studio

用AESCrypt方法。我用compile 'com.scottyab:aescrypt:0.0.1'

private void testAES() { 
    try { 

     final byte[] encrypted = Base64.decode("R3JhbmRlIFZpY3RvaXJlICE=", Base64.NO_WRAP); 

     byte[] keyBytes = Base64.decode("L/91ZYrliXvmhYt9FKEkkDDni+PzcnOuV9cikm188+4=", Base64.NO_WRAP); 
     final byte[] ivBytes = Base64.decode("gqjFHI+YQiP7XYEfcIEJHw==".getBytes(), Base64.NO_WRAP); 

     final SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); 

     byte[] decodedBytes = AESCrypt.decrypt(keySpec, ivBytes, encrypted); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

隨着值密碼,我用它那樣。

private static byte[] testCipher() { 

    try { 

     final byte[] encrypted = Base64.decode("R3JhbmRlIFZpY3RvaXJlICE=", Base64.NO_WRAP); 

     byte[] keyBytes = Base64.decode("L/91ZYrliXvmhYt9FKEkkDDni+PzcnOuV9cikm188+4=", Base64.NO_WRAP); 
     byte[] ivBytes = Base64.decode("gqjFHI+YQiP7XYEfcIEJHw==".getBytes(), Base64.NO_WRAP); 

     final IvParameterSpec ivSpecForData = new IvParameterSpec(ivBytes); 

     SecretKeySpec decodedKeySpec = new SecretKeySpec(keyBytes, "AES"); 
     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     cipher.init(Cipher.DECRYPT_MODE, decodedKeySpec, ivSpecForData); 

     byte[] decodedBytes = cipher.doFinal(encrypted); // I have the error here // 

     return decodedBytes; 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

無論我做什麼,我有百達了同樣的錯誤:

error:1e06b07b:Cipher functions:EVP_DecryptFinal_ex:WRONG_FINAL_BLOCK_LENGTH

我試圖把在Cipher.getInstance(AES/CBC/NoPadding,AES/CBC/PKCS5Padding,AES/CBC/PKCS7Padding),但沒有任何變化。 你有什麼想法來幫助我嗎?

+1

歡迎來到Stack Overflow!填充錯誤可能意味着任何數量的事情:錯誤的密鑰,錯誤的編碼,不完整/過密的密文。您應該顯示加密代碼並給出您使用的示例值。否則,這將是明顯猜測這個代碼(或加密代碼)可能是錯誤的。總之,請創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

回答

1

"R3JhbmRlIFZpY3RvaXJlICE="解碼爲17個十六進制字節4772616E646520566963746F6972652021這是ASCII文本:「Grande Victoire!」。

對於AES來說,17個字節不是有效大小,這是需要加密數據爲16字節塊大小倍數的分組密碼。

Base64編碼沒有加密。

+0

謝謝。我真的認爲AES/CBC/PKCS5Padding可以散列字節,並可以直接填充最後一個塊。我在IOS中基本上有相同的代碼,但它的工作原理,我不知道爲什麼。 如果你知道這兩者之間的差異,可以告訴我,因爲我仍然卡在我的解密代碼。 –