반응형
PHP에서 AES-256-CBC 방식으로 암호화 및 복호화를 구현하려면 openssl_encrypt()와 openssl_decrypt() 함수를 사용할 수 있습니다. 아래는 AES-256-CBC를 사용하는 간단한 암복호화 예제입니다.
PHP :: AES-256-CBC 암복호화 예제
<?php
function encrypt_aes_256_cbc($plaintext, $key, $iv) {
$encrypted = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($encrypted);
}
function decrypt_aes_256_cbc($ciphertext_base64, $key, $iv) {
$ciphertext = base64_decode($ciphertext_base64);
return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
}
// 키와 IV는 각각 32바이트, 16바이트여야 함
$key = hash('sha256', 'your-secret-key', true); // 32바이트 키 생성
$iv = substr(hash('sha256', 'your-secret-iv'), 0, 16); // 16바이트 IV 생성
$plaintext = "Hello, AES-256-CBC!";
echo "원문: " . $plaintext . "\n";
// 암호화
$encrypted = encrypt_aes_256_cbc($plaintext, $key, $iv);
echo "암호문 (base64): " . $encrypted . "\n";
// 복호화
$decrypted = decrypt_aes_256_cbc($encrypted, $key, $iv);
echo "복호문: " . $decrypted . "\n";
?>
※ 주의사항
1. AES-256-CBC는 IV(Initial Vector)가 반드시 필요하며, 16바이트(128비트)여야 합니다.
2. openssl_encrypt()의 세 번째 인자(키)는 정확히 32바이트여야 합니다. 부족하거나 길면 잘리므로 hash('sha256', ...)을 사용하면 안전합니다.
3. IV는 고정되면 보안상 문제가 생길 수 있으므로 실제 사용 시에는 무작위로 생성하고 암호문과 함께 저장하거나 전송하는 것이 좋습니다.
무작위 IV 생성 (보안 강화)
$iv = openssl_random_pseudo_bytes(16);
- 그 후 암호문 앞에 IV를 붙여 전송하고 복호화할 때 잘라서 사용하면 됩니다.
반응형
'PHP' 카테고리의 다른 글
POST 방식의 API 호출 예제 (26) | 2025.06.24 |
---|---|
API 이란 무엇인가요? (37) | 2025.06.23 |
변수의 어떤 값이 숫자인지 확인하려면 (8) | 2025.06.23 |
openssl_decrypt() 사용가능 유무 (55) | 2025.06.18 |
PHP7과 PHP8 버전의 차이점 (22) | 2025.06.17 |