2012-01-06 32 views
3

我使用AES加密來加密和解密服務器端的PHP和Android應用程序(作爲客戶端)之間的字符串。Java和PHP之間的加密/解密字符串

PHP中的加密字符串是:

HaxRKnMxT24kCJWUXaVvqDHahzurJQK+sYA4lIHql/U= 

,並在Java中它是:

HaxRKnMxT24kCJWUXaVvqD/KMEkJTPTXEcCsHIYGX9TGtCNOHQcJyUURPk8qlgf3 

我利用phpseclib在PHP腳本執行加密。

我在這裏錯過了什麼?

這裏的相關的Java代碼

SecretKeySpec skeySpec = new SecretKeySpec(pad16(pass), "AES"); 
Cipher c = Cipher.getInstance("AES"); 
c.init(Cipher.ENCRYPT_MODE, skeySpec); 
byte[] out = c.doFinal(input) 

而且PHP代碼在這裏:

$aes = new Crypt_AES(); 
$aes->setKey('password'); 
$encrypted_encoded_text = base64_encode($aes->encrypt($plaintext)); 
+0

在Java-PHP之間進行加密/解密時存在填充問題。看到這個鏈接 - http://www.logikdev.com/2010/11/01/encrypt-with-php-decrypt-with-java/ – Manish 2012-01-06 11:30:36

+0

@ManishSharma:哦感謝提到填充! :) – 2012-01-06 11:38:36

回答

4

對於加密/解密不同語言的工作,有幾件事情需要是相同的。

  1. 加密算法(廢話!)
  2. 關鍵(廢話,又來了!)
  3. 密鑰大小
  4. 操作模式(ECB,CBC,CTR)
  5. 初始化向量(如CBC,沒有需要ECB)
  6. 填補方案

    ,可能有一些更多的因素太多....

你確定所有的語言都是相同的嗎?如果是的話,那麼你的加密/解密應該完美地工作,除非在執行中有一個錯誤(這是非常非常罕見但可能的)。