java - Java 和 PHP 之间的加密不匹配

标签 java php aes encryption

我正在研究一个将数据传递给第 3 方应用程序的加密系统。加密是用 Java 完成的,解密是用 PHP 完成的。尽管进行了多次尝试,但我无法让 PHP 应用程序打开加密的字符串。

出于测试目的,我创建了一个同样加密数据的 PHP 脚本,因此我可以比较 Java 和 PHP 加密的字符串。结果匹配到第 21 个字符,然后它们就不同了。这是我的:

// Java - Encrypt
private String EncryptAES(String text,String key) throws Exception
    {
      SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");

      // Instantiate the cipher
      Cipher cipher = Cipher.getInstance("AES");

      cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
      byte[] encrypted = cipher.doFinal(text.getBytes());

      String encrypttext = new BASE64Encoder().encode(encrypted);

      return encrypttext;
    }

RESULT: TeUZAFxoFoQy/roPm5tXyPzJP/TLAwR1aIGn2xHbZpsbY1qrKwXfO+F/DAqmeTwB0b8e6dsSM+Yy0zrQt22E2Q== 

// PHP - Encrypt
<?php

$encrypt =  $crypt = openssl_encrypt($toCrypt,"AES256","key-32-char-long");
echo $encrypt; 

?>

RESULT: TeUZAFxoFoQy/roPm5tXyC05wta1Z5YOXcq4OtgFoSbfVi/bHAuD6B5tDthT8EcGXQir08UAx0QvcqRJ2fJmbQ==

很明显,有些事情是正确的,因为部分字符串匹配,但显然不是所有的都是正确的,因为其余部分不匹配。此外,如果我尝试在 PHP 中解密 Java 字符串,则没有任何反应:

// PHP - Decrypt
<?php
$toDecrypt = "TeUZAFxoFoQy/roPm5tXyPzJP/TLAwR1aIGn2xHbZpsbY1qrKwXfO+F/DAqmeTwB0b8e6dsSM+Yy0zrQt22E2Q==";
$decrypt = openssl_decrypt($toDecrypt,"AES256","<key-32-char-long>");
echo $decrypt;

?>

RESULT: <nothing>

有人知道会发生什么吗?

最佳答案

由于两个加密字符串都以相同的字符开头,所以看起来您在一个中使用 ECB 而在另一个中使用 CBC。

关于java - Java 和 PHP 之间的加密不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10451068/

相关文章:

java - 使用正则表达式仅获取分隔符

java - Selenium 警报仅在 Debug模式下显示

php - 在 MySQL 中加密/解密大文本数据的推荐方法是什么?

java - 在 Java 中执行 while 循环更改变量

java - 无法在我的程序中使用比较器

php - PDO fetch 在 PHP 中总是返回 false

php - Wordpress 开发人员自定义背景选项

php - 简单的 PHP 嵌入到一些非常简单的 HTML 中

c++ - 如何在 crypto++ 库的 AES 中找到添加轮 key 和混合列代码

javascript - 使用 jquery 进行 AES 加密