java php aes加密解密_php与java对接中aes加密解密乱码问题。
时间: 2023-08-01 22:07:45 浏览: 153
在PHP和Java之间进行AES加密和解密时出现乱码问题,可能是因为两个语言之间使用了不同的编码方式。为了解决这个问题,我们需要在两个语言之间选择一种通用的编码方式,以确保加密和解密时的数据一致。
一种通用的编码方式是Base64编码。在PHP中,可以使用base64_encode()函数将加密后的数据转换为Base64编码。在Java中,可以使用java.util.Base64类进行编码和解码。在进行解密操作之前,需要先将Base64编码的数据解码成原始二进制数据。
下面是一个PHP和Java之间进行AES加密和解密的示例代码:
PHP代码:
```
$key = 'your_key';
$data = 'your_data';
// 加密
$encrypted = openssl_encrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
$base64_encrypted = base64_encode($encrypted);
// 将加密后的数据传递给Java
```
Java代码:
```
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AESUtils {
private static final String ALGO = "AES";
private static final String MODE = "ECB";
private static final String PADDING = "PKCS5Padding";
public static byte[] decrypt(byte[] key, byte[] encryptedData) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key, ALGO);
Cipher cipher = Cipher.getInstance(ALGO + "/" + MODE + "/" + PADDING);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
return cipher.doFinal(encryptedData);
}
public static void main(String[] args) throws Exception {
String keyStr = "your_key";
String encryptedStr = "your_base64_encrypted_data";
// 解码Base64编码的数据
byte[] encrypted = Base64.getDecoder().decode(encryptedStr);
byte[] key = keyStr.getBytes();
// 解密
byte[] decrypted = AESUtils.decrypt(key, encrypted);
String data = new String(decrypted);
System.out.println(data);
}
}
```
在上面的示例中,PHP代码将数据加密并转换为Base64编码,然后将其传递给Java代码。Java代码解码Base64编码的数据,使用AES算法进行解密,并将解密后的数据转换为字符串输出。注意,在实际应用中,需要确保加密和解密使用相同的密钥、算法、模式和填充方式。
阅读全文