PhpAES加密、解密與Java互操作的問題

孤劍發表於2013-12-22

   

國內私募機構九鼎控股打造APP,來就送 20元現金領取地址:http://jdb.jiudingcapital.com/phone.html
內部邀請碼:C8E245J (不寫邀請碼,沒有現金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統掛牌的公眾公司,股票程式碼為430719,為中國PE第一股,市值超1000億元。 

——————————————————————————————————————————————————————

 

問題:使用Java預設的AES加密方式(Cipher.getInstance(“AES”))並對加密後結果進行Base64編碼,這樣php(http://phpaes.com/使用這裡免費的AES實現版本

)裡可以成功進行解密。而在Php加密後的字串無法在Java中成功解密。

   1.Java中AES加密與解密預設使用AES/ECB/PKCS5Padding模式;

   2.php中的AES演算法實現使用AES/ECB/NoPadding

要注意特定的Padding實現跟演算法的blockSize有關,這裡php的blocksize是16。在php的aes加密前先對源字串進行Padding,問題得到解決。

 

前面提到Java預設的AES加密在php 的上述aes實現中可以成功解密。其實該php解密雖然看上去是成功的,其實裡面還是有些問題的。因為解密出來的字串因為Java端加密時會padding操作,php解密以後padding的字元沒有被去掉導致會出現問題。因此解密時需要removePaddingStr才能得到原始的字串。 


相關文章