현대 인터넷 환경에서는 데이터 보안이 무엇보다 중요합니다. 민감한 정보를 보호하기 위해 개발자는 데이터를 암호화하고 해독해야 하는 경우가 많습니다. 널리 사용되는 서버측 언어인 PHP는 풍부한 암호화 기능과 라이브러리를 제공하고 여러 암호화 알고리즘을 지원합니다. 이 기사에서는 PHP를 사용하여 데이터 암호화 및 암호 해독을 구현하는 방법과 실용적인 샘플 코드를 설명합니다.
대칭 암호화 알고리즘은 가장 일반적으로 사용되는 암호화 방법으로, 공유 키 암호화라고도 합니다. 암호화와 복호화에는 동일한 키가 사용됩니다. PHP는 AES, DES, 3DES 등과 같은 다양한 대칭 암호화 알고리즘을 지원합니다. 다음은 AES-256-CBC 알고리즘을 사용하는 예입니다.
함수 암호화($data, $key) { $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv); return base64_encode($iv . $encrypted); } 함수 해독($data, $key) { $data = base64_decode($data); $iv = substr($data, 0, openssl_cipher_iv_length('aes-256-cbc')); $encrypted = substr($data, openssl_cipher_iv_length('aes-256-cbc')); return openssl_decrypt($encrypted, 'aes-256-cbc', $key, 0, $iv); } $key = '비밀_키'; $data = '민감한_데이터'; $encryptedData = 암호화($data, $key); echo '암호화된 데이터: ' . $암호화된 데이터 . PHP_EOL; $decryptedData = 해독($encryptedData, $key); echo '복호화된 데이터: ' . $decryptedData . PHP_EOL;
코드 설명:
비대칭 암호화 알고리즘은 공개 키와 개인 키라는 두 개의 키를 사용합니다. 공개키는 암호화에 사용되고, 개인키는 복호화에 사용됩니다. PHP는 RSA와 같은 알고리즘을 지원합니다. 샘플 코드는 다음과 같습니다.
함수 암호화($data, $publicKey) { openssl_public_encrypt($data, $encrypted, $publicKey); return base64_encode($encrypted); } 함수 해독($encryptedData, $privateKey) { openssl_private_decrypt(base64_decode($encryptedData), $decrypted, $privateKey); $decrypted를 반환합니다. } $publicKey = openssl_pkey_get_public('file://path/to/public_key.pem'); $privateKey = openssl_pkey_get_private('file://path/to/private_key.pem'); $data = '민감한_데이터'; $encryptedData = 암호화($data, $publicKey); echo '암호화된 데이터: ' . $암호화된 데이터 . PHP_EOL; $decryptedData = 해독($encryptedData, $privateKey); echo '복호화된 데이터: ' . $decryptedData . PHP_EOL;
코드 설명:
해시 함수는 모든 길이의 데이터를 고정 길이 해시 값으로 매핑하며 암호화 및 암호 해독보다는 데이터 무결성을 확인하는 데 자주 사용됩니다. PHP는 일반적으로 MD5, SHA1 및 SHA256과 같은 기능을 사용합니다. 예:
$data = '민감한_데이터'; $hashedData = md5($data); echo '해시된 데이터: ' . $해시데이터 . PHP_EOL;
코드 설명:
이 기사에서는 PHP를 사용하여 대칭 암호화, 비대칭 암호화 및 해시 함수를 포함한 데이터 암호화 및 해독을 구현하는 방법을 설명하고 전체 샘플 코드를 제공합니다. 이러한 방법을 통해 개발자는 전송 및 저장 중에 민감한 데이터의 보안을 효과적으로 보호할 수 있습니다.