簡體   English   中英

將Java轉換為PHP:加密AES/CBC/PKCS7Padding,密鑰大小:32字節,iv:16字節

[英]Convert Java to PHP: encrypt AES/CBC/PKCS7Padding, key size: 32 bytes, iv: 16 bytes

我正在嘗試將 Java 轉換為 PHP 代碼:加密 AES/CBC/PKCS7Padding,密鑰大小:32 字節。
Java碼

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

String data = "XXX_TEST";
String initVector = "IvHo9h3E2sNvyiT7";
String key = "0k7XHeJkgcI5cHTKblq7lmeM71wlBXQG";

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");

IvParameterSpec iv = new IvParameterSpec(initVector.getBytes(StandardCharsets.UTF_8));

byte[] keyArr = Base64.getDecoder().decode(key.getBytes());
SecretKeySpec sKeySpec = new SecretKeySpec(keyArr, "AES");

cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, iv);

byte[] output = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));

String encryptedData = Base64.getEncoder().encodeToString(output);

運行后: encryptedData將是tY3OYnUgdUMoSlRCcYWLYg==


PHP:

$iv = 'IvHo9h3E2sNvyiT7'; //same with JAVA code(16 bytes)
$key = '0k7XHeJkgcI5cHTKblq7lmeM71wlBXQG';//same with JAVA code(32 bytes)

$encryptedData = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
$encryptedData = base64_encode($encryptedData);

運行后: $encryptedData將是oRSm/Jg/sAsMSgE++Mw5IQ==

問題:如何調整 PHP 代碼以使其具有與 Java 代碼相同的 output 代碼( tY3OYnUgdUMoSlRCcYWLYg== )?
我正在使用 php8.1

主要問題是,您對密鑰執行 Base64 解碼。 只需使用字節:

String data = "XXX_TEST";
String initVector = "IvHo9h3E2sNvyiT7";
String key = "0k7XHeJkgcI5cHTKblq7lmeM71wlBXQG";

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 

IvParameterSpec iv = new IvParameterSpec(initVector.getBytes(StandardCharsets.UTF_8));
byte[] keyArr = key.getBytes();
SecretKeySpec sKeySpec = new SecretKeySpec(keyArr, "AES");
cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, iv);
byte[] output = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
String encryptedData = Base64.getEncoder().encodeToString(output);
System.out.println(encryptedData);

結果為oRSm/Jg/sAsMSgE++Mw5IQ== 無法使用 PKCS7Padding 進行嘗試,請自行嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM