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


Encrypt/Decrypt string between Java and PHP

我使用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));

为了在不同的语言之间进行加密/解密,有一些事情需要相同。

  1. 加密算法(duh!)
  2. 钥匙(再次!)
  3. 密钥大小
  4. 操作模式(ECB、CBC、CTR)
  5. 初始化矢量(如果CBC,则无需ECB)
  6. 填充方案

    可能还有更多的因素。。。。

你确定这两种语言都是一样的吗?如果是,那么您的加密/解密应该可以完美地工作,除非在实现中出现错误(这是非常罕见但可能的)。