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

Teo*_*ing 3 php java encryption android aes

我正在使用 AES 加密来加密和解密服务器端 php 和 Android 应用程序(作为客户端)之间的字符串。

PHP中的加密字符串是:

HaxRKnMxT24kCJWUXaVvqDHahzurJQK+sYA4lIHql/U=
Run Code Online (Sandbox Code Playgroud)

在 Java 中它是:

HaxRKnMxT24kCJWUXaVvqD/KMEkJTPTXEcCsHIYGX9TGtCNOHQcJyUURPk8qlgf3
Run Code Online (Sandbox Code Playgroud)

我在 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 )
Run Code Online (Sandbox Code Playgroud)

和这里的 PHP 代码:

$aes = new Crypt_AES();
$aes->setKey('password');
$encrypted_encoded_text =  base64_encode($aes->encrypt($plaintext));
Run Code Online (Sandbox Code Playgroud)

Ran*_*ray 5

对于跨不同语言的加密/解密,几乎没有什么需要相同的。

  1. 加密算法(废话!)
  2. 钥匙(废话,又来了!)
  3. 密钥大小
  4. 操作模式(ECB、CBC、CTR)
  5. 初始化向量(如果是 CBC,不需要 ECB)
  6. 填充方案

    可能还有更多因素......

您确定所有这些在两种语言中都相同吗?如果是,那么您的加密/解密应该完美无缺,除非实现中存在错误(这种情况非常罕见但可能)。