Android AES加密報錯處理:javax.crypto.IllegalBlockSizeException: error:1e00007b:Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH

來源:互聯網
上載者:User

標籤:inf   密碼學   響應   _id   一個   擷取   cipher   size   代碼   

一、問題說明

今天寫AES加/解密功能的apk,設想是四個控制項(測試用的,介面醜這種東西請忽略)

一個編緝框----用於輸入要加密的字串

一個文字框----用於輸出加密後的字串,和加密後點擊解密按鈕時解密後的字串

一個加密按鈕----點擊後進行加密

一個解密按鈕----點擊後進行解密

介面如下:

點擊加密沒有問題,但再點擊解密的時候一直報錯:“W/System.err: javax.crypto.IllegalBlockSizeException: error:1e00007b:Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH”

 

二、報錯追蹤

因為用於加解密的類是大學時密碼學大作業用過的,基本確定不會有問題,所以將問題確定在傳過去的參數有問題上。

2.1 toString()錯誤使用

首先觀察發現無論加密字串內容和長度如何改變,加密的結果總是"[[email protected]"的形式,如所示

這肯定是有問題的----AES作為高強度的密碼編譯演算法加密內容改變後加密結果開頭還是一樣這是不可能的,對稱式加密加密結果長度不隨加密內容長短變化這也是不可能的。

加解密按鈕點擊事件響應代碼如下:

調試可以看到"[[email protected]"更類似於byte[]的id,而不是其內容

也就是說,想使用byte_encrypt_result.toString()將byte[]轉成String,雖然看起來本該如此但實際上是行不通的。

 2.2 byte[]轉String再轉byte[]內容發生改變引起錯誤

toString()不能用,然後看到這位小哥哥說可以通過new String(byte[]),文章寫得很清晰一看就是高手我是很相信他的。所以代碼就改成了下邊這個樣子

 

加密結果是一堆亂碼,很好,這就是我們想要的

但是點擊解密,依然一樣報錯“W/System.err: javax.crypto.IllegalBlockSizeException: error:1e00007b:Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH”

代碼邏輯看起來完全沒有問題,怎麼還會報錯呢。經過反覆調試觀察到,解密時擷取的byte_encrypt_result內容和長度完全不一樣(在前面是byte[16]這裡變成了byte[28])

也就是說,在new String(byte[])到toString().getBytes()再取回byte[]這個過程中,byte[]內容發生了變化

百度“byte[]轉string再轉回byte[]”,看到好像說new String()預設使用UTF-8編碼getBytes()預設使用ISO8859-1編碼引發了問題,指定new String()和getBytes()統一使用ISO8859-1即可解決問題。(我覺得java的編碼問題是相當令人頭疼的,尤其在讀寫檔案和網路通訊上,問題能解決就好實在不想深究)

所以最終代碼如下:

程式成功解密:

 

Android AES加密報錯處理:javax.crypto.IllegalBlockSizeException: error:1e00007b:Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.