我正在开发一个将数据传递给第三方应用程序的加密系统。加密是用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==
and
// 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>
有人知道可能会发生什么吗?