PHP 암호화 SHA-256, SHA-512, AES-256, RSA

프로그래밍/네트워크, 보안 2018. 10. 26. 00:49
반응형

PHP 언어에서 다양한 암호화 알고리즘을 사용하는 방법을 알아 봅니다.


1. SHA-256, SHA-512


단방향 암호화 알고리즘 입니다.


// SHA-256

$hashed = base64_encode(hash('sha256', 'password', true));

echo $hashed;


// SHA-512

$hashed = base64_encode(hash('sha512', 'password', true));

echo $hashed;


SHA 알고리즘 예제



2. AES-256


대칭키 알고리즘 입니다. openssl 함수를 사용하기 위해서 php.ini 파일에 openssl 확장을 사용하도록 설정합니다.


extension=openssl


예제 입니다.


$plainText = '암호화될 메세지';

$password = 'password string';


// 256 bit 키를 만들기 위해서 비밀번호를 해시해서 첫 32바이트를 사용합니다.

$password = substr(hash('sha256', $password, true), 0, 32);

echo "비밀번호 바이너리:" . $password . "<br/>";


// Initial Vector(IV)는 128 bit(16 byte)입니다.

$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);


// 암호화

$encrypted = base64_encode(openssl_encrypt($plainText, 'aes-256-cbc', $password, OPENSSL_RAW_DATA, $iv));


// 복호화

$decrypted = openssl_decrypt(base64_decode($encrypted), 'aes-256-cbc', $password, OPENSSL_RAW_DATA, $iv);


echo 'plainText : ' . $plainText . "<br/>";

echo '암호화 : ' . $encrypted . "<br/>";

echo '복호화 : ' . $decrypted . "<br/>";


AES 알고리즘 예제



3. RSA 알고리즘


비대칭키 알고리즘 입니다.


// openssl.cnf

$config = 'D:\util\php-7.2.9-nts-Win32-VC15-x64\extras\ssl\openssl.cnf';


// 키 생성

$genRes = openssl_pkey_new(array(

    'config' => $config,

    'digest_alg' => "sha512",

    'private_key_bits' => 4096,

    'private_key_type' => OPENSSL_KEYTYPE_RSA,

));


// 개인키 생성

openssl_pkey_export($genRes, $privKey, NULL, array('config' => $config));


// 공개키 생성

$pubKeyArray = openssl_pkey_get_details($genRes);

$pubKey = $pubKeyArray['key'];


// 암호화

$plainText = "암호화 될 문자열";

openssl_public_encrypt($plainText, $encrypted, $pubKey);

$encryptedBase64 = base64_encode($encrypted);


// 복호화

openssl_private_decrypt(base64_decode($encryptedBase64), $decrypted, $privKey);


echo "평문 : " . $plainText . "<br />";

echo "암호화 : " . $encryptedBase64 . "<br />";

echo "복호화 : " . $decrypted . "<br />";


RSA 알고리즘 예제

반응형

댓글을 달아 주세요