【问题标题】:How to encrypt with phpseclib and decrypt with java using AES algorithm如何使用 phpseclib 加密并使用 AES 算法使用 java 解密
【发布时间】:2015-04-09 13:20:04
【问题描述】:

我必须在运行 php 脚本的服务器上加密数据,然后使用 AES 算法将它们发送到另一台运行 Java 的服务器。我选择在 php 和 Java 端分别使用 phpseclib 和 javax.crypto 包。 不幸的是有填充异常。这是我的代码:

在 php 方面:

$aes = new Crypt_AES('MODE_ECB');
$key = "secretkeyfor1234secretke";
$aes->setKey($key);
$plaintext = 'Good evening this is just a test';
$cryptedmessage =  base64_encode($aes->encrypt($plaintext));

在 java 方面: clefAES 包含密钥,数据包含密文。我使用 RSA 加密发送密钥(此处未报告)。

data = EFjTatx2VkAZR3ScS0UadQr8M6zEkIz/kAX0Cl+XH2FNNHVbeJsEd2b+zWlEkvR6;//( it is base64 encoded )
Cipher aescipher = Cipher.getInstance("AES/ECB/NoPadding", "SunJCE");
Key keySpec = new SecretKeySpec(clefAES, "AES");                   
byte[] encryptedTextByte = decoder.decodeBuffer(data);
aescipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decryptedByte = aescipher.doFinal(encryptedTextByte);
String decryptedText = new String(decryptedByte);

这是decryptedText给出的结果:

晚上好,thicx��#3mg�?我...

如果有人知道我为什么会得到这个结果以及如何解决这个问题,那将非常有帮助。 phpseclib 是否与用于 aes 加密的 javax.crypto 包兼容?这是实现我想要实现的目标的最佳方式吗?

【问题讨论】:

  • 您的 Java 代码无法编译。修复后,它不会从该数据中产生该输出。 EFjTatx2VkAZR3ScS0UadQr8M6zEkIz/kAX0Cl+XH2FNNHVbeJsEd2b+zWlEkvR6 不是 base64 编码的 AES/ECB/NoPadding 加密。我从 Java 代码中得到的 base64 编码密文是GYQGpH6fRpHBP0ACElbcp9i8pjKf4G7wiPLDL7TM1Ec=
  • 感谢您的快速答复。我检查它并向您发送反馈

标签: java encryption aes phpseclib


【解决方案1】:

这是我从您的 PHP 代码中得到的输出:

GYQGpH6fRpHBP0ACElbcp1nvcS0ojcqzvnqclHxvB+BtgM4KEH+K7Q2F6rhEx0hM

这与您传递给 Java 代码的内容形成对比。

另外,您的 PHP 代码没有执行 ECB 模式。它正在做CBC模式。这是因为new Crypt_AES('MODE_ECB'); 不是您需要使用的代码。相反,这是执行 ECB 模式所需的代码:

new Crypt_AES(CRYPT_MODE_ECB);

另外,phpseclib 默认做填充。要禁用它,您需要这样做:

$aes->disablePadding();

说了这么多,我得到了这个输出:

GYQGpH6fRpHBP0ACElbcp9i8pjKf4G7wiPLDL7TM1Ec=

【讨论】:

  • 你是对的。那是一个错误。你太棒了neubert,它有效。我在某个地方发现 CBC 比 ECB 最安全。您能告诉我进行 CBC 加密的正确方法吗?
  • 使用 phpseclib 只需执行 CRYPT_MODE_CBC 或根本不将任何参数传递给 Crypt_AES(phpseclib 默认使用 CBC,因此如果您传递给它的参数无效,它将使用 CBC)。除此之外,使用它与使用 ECB 没有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多