본문 바로가기
PHP

AES-256-CBC 방식의 암복호화 처리

by 코딩박사 2025. 6. 18.
반응형

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