在Java和PHP之间加密/解密字符串

3
我正在使用AES加密算法在服务器端的PHP和Android应用程序(作为客户端)之间加密和解密字符串。
PHP中的加密字符串是:
HaxRKnMxT24kCJWUXaVvqDHahzurJQK+sYA4lIHql/U=

"在Java中,它是:"
HaxRKnMxT24kCJWUXaVvqD/KMEkJTPTXEcCsHIYGX9TGtCNOHQcJyUURPk8qlgf3

我正在PHP脚本中使用phpseclib进行加密。
我错过了什么?
这里是相关的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));

在Java-PHP之间进行加密/解密时,填充存在问题。请参阅此链接 - http://www.logikdev.com/2010/11/01/encrypt-with-php-decrypt-with-java/。 - Manish
@ManishSharma:哦,谢谢你提到了填充! :) - Ranhiru Jude Cooray
1个回答

5
为了使加密/解密在不同语言之间正常工作,需要保持以下几个方面的一致性:
  1. 加密算法(显然!)
  2. 密钥(再次显然!)
  3. 密钥大小
  4. 操作模式(ECB、CBC、CTR)
  5. 初始化向量(如果是CBC,则不需要ECB)
  6. 填充方案

    还可能有其他因素....

你确定这些在两种语言中都是相同的吗?如果是,那么你的加密/解密应该可以无缝地工作,除非实现中存在错误(这很少见但可能会发生)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接