다시 작성된 제목은 다음과 같습니다. CryptoJS aes 암호화 기능의 PHP 버전
P粉329425839
2023-08-31 23:20:42
<p>CryptoJS를 사용하여 이 JS 코드와 동등한 PHP를 만들려고 합니다. </p>
<pre class="brush:php;toolbar:false;">함수 aesEncrypt(데이터) {
const key = 'GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=';
const iv = '
const 암호 = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv), // 구문 분석 IV
패딩: CryptoJS.pad.Pkcs7,
모드: CryptoJS.mode.CBC
})
cipher.toString()을 반환합니다.
}</pre>
<p>js 코드의 결과: pHjpwiyKq7Rf4dFcBMbm1w==</p>
<p>다른 스택오버플로우 질문을 읽고 작성한 PHP 코드입니다. 그러나 동일한 결과를 반환하지 않습니다. </p>
<pre class="brush:php;toolbar:false;">$plaintext = "plainText";;
$방법 = 'aes-256-cbc';
$key = base64_encode("GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=");
$iv = hex2bin('00000000000000000000000000000000');
$ciphertext = openssl_encrypt(
$ 일반 텍스트,
$방법,
$키,
OPENSSL_RAW_DATA,
$iv
);
$ciphertext = base64_encode($ciphertext);
echo $ciphertext;</pre>
<p>PHP 코드 결과: +YJOMi2vISmEXIjUZls3MA==</p>
이것을 시도해 보세요:
으아악PHP 코드에서 키는 Base64로 인코딩된 것이 아닌 Base64 암호해독이어야 합니다.
으아악이 변경으로 필수 암호문이 생성됩니다.
openssl_encrypt()
调用的第四个参数中传递0
而不是OPENSSL_RAW_DATA
의 경우 암호문은 기본적으로 Base64로 인코딩됩니다. 따라서 암호문을 명시적으로 Base64로 인코딩하는 것은 필요하지 않습니다.정적 IV는 안전하지 않다는 점을 기억하세요. 일반적으로 암호화 프로세스 중에 randomIV가 생성되어 암호문과 함께 암호 해독 당사자에게 전달됩니다(일반적으로 함께 연결됨).