-
RSA 암호화/복호화 예제 (rsa_encrypt/rsa_decrypt)개발 & 계발/PHP 2019. 6. 18. 10:37반응형
<?
$password = "test";
$arr = rsa_generate_keys($password, $bits = 2048, $digest_algorithm = 'sha256');
$privatekey = $arr["private_key"];
$publickey = $arr["public_key"];
echo "private key\n";
echo $privatekey;
echo "\n\n";
echo "public key\n";
echo $publickey;
echo "\n\n";
$plaintext = "SEO.KD";
echo "plaintext\n";
echo $plaintext;
echo "\n\n";
$ciphertext = rsa_encrypt($plaintext, $publickey);
echo "ciphertext\n";
echo $ciphertext;
echo "\n\n";
$resulttext = rsa_decrypt($ciphertext, $privatekey, $password);
echo "resulttext\n";
echo $resulttext;
echo "\n\n";function rsa_generate_keys($password, $bits = 2048, $digest_algorithm = 'sha256')
{
$res = openssl_pkey_new(array(
'digest_alg' => $digest_algorithm,
'private_key_bits' => $bits,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
openssl_pkey_export($res, $private_key, $password);
$public_key = openssl_pkey_get_details($res);
$public_key = $public_key['key'];
return array(
'private_key' => $private_key,
'public_key' => $public_key,
);
}
function rsa_encrypt($plaintext, $public_key)
{
// 용량 절감과 보안 향상을 위해 평문을 압축한다.
$plaintext = gzcompress($plaintext);
// 공개키를 사용하여 암호화한다.
$pubkey_decoded = @openssl_pkey_get_public($public_key);
if ($pubkey_decoded === false) return false;
$ciphertext = false;
$status = @openssl_public_encrypt($plaintext, $ciphertext, $pubkey_decoded);
if (!$status || $ciphertext === false) return false;
// 암호문을 base64로 인코딩하여 반환한다.
return base64_encode($ciphertext);
}function rsa_decrypt($ciphertext, $private_key, $password)
{
// 암호문을 base64로 디코딩한다.
$ciphertext = @base64_decode($ciphertext, true);
if ($ciphertext === false) return false;
// 개인키를 사용하여 복호화한다.
$privkey_decoded = @openssl_pkey_get_private($private_key, $password);
if ($privkey_decoded === false) return false;
$plaintext = false;
$status = @openssl_private_decrypt($ciphertext, $plaintext, $privkey_decoded);
@openssl_pkey_free($privkey_decoded);
if (!$status || $plaintext === false) return false;
// 압축을 해제하여 평문을 얻는다.
$plaintext = @gzuncompress($plaintext);
if ($plaintext === false) return false;
// 이상이 없는 경우 평문을 반환한다.
return $plaintext;
}# 출저 : https://gist.github.com/kijin/8573062
?>PHP에서 RSA 개인키/공개키 조합을 사용하여 서버에 비밀번호를 저장할 필요 없이 문자열을 암호화하는 법
PHP에서 RSA 개인키/공개키 조합을 사용하여 서버에 비밀번호를 저장할 필요 없이 문자열을 암호화하는 법 - rsa_encrypt.php
gist.github.com
'개발 & 계발 > PHP' 카테고리의 다른 글
PHP로 JSON API 서버 만들 때에 index.php 없이 서버 URL 만드는 Apache 설정 방법 (0) 2023.10.21 PHP EXPECT 설치 (at 라즈베리파이) (0) 2020.06.20 PHP 소켓 서버 만들기! (0) 2018.12.04 PHP 변수 필터 (validation) (0) 2018.11.19 phpMyAdmin 외부 서버 연동 방법 (0) 2018.11.15