我的问题是:我在Java中加密的内容可以在Java中完美解密,但PHP中的mcrypt
无法解密。我使用mcrypt
加密的内容可以用mcrypt
解密,但不能在Java中解密。
我想要在Java应用程序和PHP页面之间发送和接收加密数据,因此我需要它们能够兼容。
以下是我的代码...
JAVA...
public static String crypt(String input, String key){
byte[] crypted = null;
try{
SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
}
return Base64.encodeBase64String(crypted);
}
public static String decrypt(String input, String key){
byte[] output = null;
try{
SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(Base64.decodeBase64(input));
}catch(Exception e){
}
return new String(output);
}
运行中:
public static void main(String[] args) {
String key = "Zvzpv8/PXbezPCZpxzQKzL/FeoPw68jIb+NONX/LIi8=";
String data = "example";
System.out.println(Cpt.decrypt(Cpt.crypt(data, key), key));
}
输出:
example
PHP是一种流行的服务器端脚本语言,经常用于开发Web应用程序。 它可以与HTML结合使用,并可以轻松访问数据库。 PHP代码在服务器上执行,并生成HTML输出以向客户端显示内容。
function getEncrypt($sStr, $sKey) {
return base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sKey,
$sStr,
MCRYPT_MODE_ECB
)
);
}
function getDecrypt($sStr, $sKey) {
return mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$sKey,
base64_decode($sStr),
MCRYPT_MODE_ECB
);
}
运行中:
$crypt = getDecrypt(getEncrypt($str, $key), $key);
echo "<p>Crypt: $crypt</p>";
输出:
Crypt: example�������������������������
用PHP和密钥"Zvzpv8/PXbezPCZpxzQKzL/FeoPw68jIb+NONX/LIi8="对"example"进行加密,得到了"YTYhgp4zC+w5IsViTR5PUkHMX4i7JzvA6NJT1FqhoGY="。
使用相同的密钥和Java加密同样的内容,得到了"+tdAZqTE7WAVPXhB3Tp5+g=="。
我已按正确顺序进行了base64编码和解码,并测试了Java和PHP之间的base64编码和解码兼容性,一切正常。