Image

지식 기반 → 텍스트 암호화 및 해독을 위한 PHP 스크립트의 예

[스크립트]
출판 날짜: 10.10.2023

다음은 openssl을 기반으로 텍스트 문자열을 암호화하고 해독하기 위해 PHP 8.1에서 테스트한 스크립트의 예입니다.

nano encrypt-decrypt.php
<?php 

define('ENCRYPTION_KEY', '<mark>my-secret-key-there-2121</mark>');

// 암호화
$plaintext = "<output>Test string for encryption in php 8.1</output>";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
<output>echo $ciphertext.'<br>';</output>
 
// 암호 해독
$c = base64_decode($ciphertext);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$plaintext = openssl_decrypt($ciphertext_raw, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
if (hash_equals($hmac, $calcmac))
{
    <output>echo $plaintext;</output>
}

?>

첫 번째 줄은 암호화 결과이고, 두 번째 줄은 복호화 결과입니다. 또한 문구를 변경하지 않고 페이지를 새로 고치면 항상 다른 결과를 얻지만 해독하면 동일합니다.

이러한 기능을 다른 파일로 분리하려면 ENCRYPTION_KEY 매개변수에 키를 전송해야 합니다.





No Comments Yet