再談Java、Android AES加密算法填充方式

今天發佈的博客有些臨時趕場成分…

下班騎上哈羅飛奔回家,天氣還一如既往的炎熱,於是到了家習慣性的打開了空調,從冰箱掏出冰棒享受着透心涼的趕腳。待身上的熱輻射褪去殆盡,便去開鍋做起牛肉粉絲湯,嗯,今天的晚餐。做好,盛碗,端進臥室,在空調的風口下吃口味更佳,嗯,還不起勁,打開了“王者農藥”進行一場刺激的峽谷之戰,邊吃邊玩,意境更佳。

完事,洗碗刷鍋後看看手機上的時間,如果時間充足的話就去游泳,然而“一不小心”看到了今天的日期,F…K!31號了!這個月一篇文章都沒發!!!

image

趕緊開機開寫,於是有了今天的意外產出,下面正式開始

此前寫過一篇關於AES加密的文章《Android加密算法之對稱加密AES》,介紹了相關概念,使用以及脫坑姿勢。

之所以寫續篇,是因爲最近項目中出現了AES加密的bug,折騰了許久最終確認爲Android端錯誤地使用PKCS5Padding填充方式,而服務端則是PKCS7Padding,改爲PKCS7Padding即可,還好bug只會出現在Android4.3和4.4的設備上,僅影響了極少數的用戶。呵呵呵…

希望這篇文章沒有被領導看到…看到也沒事,反正又不是我弄的

hehehe

嗯哼,求知慾強的童鞋可能會拋出以下問題:

  1. 爲什麼Android可以使用PKCS7Padding
  2. 爲什麼可以使用PKCS5Padding來解密PKCS7Padding加密的數據?

接下來一一作答

Android可以使用PKCS7Padding

我們知道Java是不支持PKCS7Padding填充的,標準的方式是PKCS5Padding。而Android實現了Java SE API,但不使用相同的源代碼,不使用相同的提供程序,也沒有作實現AES限制。

這句話引自stackoverflow

Android implements the Java SE API, but does not use the same source code, not the same provider and the AES restrictions are not implemented either.

一句話概括下:Android沒有使用標準Java的AES加密,而是自己實現了一套,順便實現了PKCS7Padding

可以使用PKCS5Padding來解密PKCS7Padding加密的數據

未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章