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;
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/>";
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 암/복호화 사용법 (4) | 2018.10.22 |
---|---|
자바스크립트 RSA 암호화 라이브러리 JSEncrypt (10) | 2018.10.04 |
Windows에서 TOMCAT에 개발용으로 SSL 적용하기 (28) | 2018.04.21 |
SSL 동작 방식을 간단히 알아보기 (0) | 2018.04.21 |
Tomcat SSL 적용시 https로 자동 리다이렉트 설정하기 (8) | 2018.04.20 |