>백엔드 개발 >PHP 튜토리얼 >PHP에서 대칭 및 비대칭 암호화를 수행하는 방법은 무엇입니까?

PHP에서 대칭 및 비대칭 암호화를 수행하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-05-21 15:10:402447검색

네트워크 보안 분야에서 암호화 기술은 데이터 보안을 보장하기 위해 데이터를 암호화하고 해독할 수 있는 매우 중요한 기술적 수단입니다. 널리 사용되는 서버 측 프로그래밍 언어인 PHP는 다양한 애플리케이션 시나리오의 요구 사항을 충족하기 위해 대칭 및 비대칭 암호화도 지원합니다.

  1. 대칭 암호화

대칭 암호화는 암호화와 복호화에 동일한 키를 사용하는 암호화 방식을 말합니다. DES, 3DES, AES 등과 같은 많은 대칭 암호화 알고리즘이 있습니다. PHP에서는 mcrypt 확장 라이브러리에서 제공하는 기능을 사용하여 대칭 암호화를 구현할 수 있습니다.

샘플 코드는 다음과 같습니다.

$key = '123456789'; // 密钥
$data = 'Hello World'; // 待加密字符串
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$cipher = mcrypt_encrypt(MCRYPT_DES, $key, $data, MCRYPT_MODE_CBC, $iv);
echo base64_encode($cipher); // 输出加密后的字符串

위 코드에서는 mcrypt_encrypt 함수를 통해 DES 암호화를 수행하고 패딩에는 MCRYPT_MODE_CBC 모드를 사용합니다. $key는 대칭 암호화를 위한 키, $data는 암호화할 일반 텍스트 문자열, $iv는 임의 초기화 벡터입니다.

복호화 샘플 코드는 다음과 같습니다.

$cipher = base64_decode('JnFXVC9e+rzR8oUgM67Q0w=='); // 加密后的字符串
$key = '123456789'; // 密钥
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$plain = mcrypt_decrypt(MCRYPT_DES, $key, $cipher, MCRYPT_MODE_CBC, $iv);
echo $plain; // 输出解密后的字符串
  1. 비대칭 암호화

비대칭 암호화 알고리즘은 암호화와 복호화를 위해 한 쌍의 키가 필요합니다. 여기서 공개 키는 공개하고 개인 키는 비밀로 유지해야 합니다. 일반적으로 사용되는 비대칭 암호화 알고리즘에는 RSA, DSA 등이 있습니다. PHP에서는 openssl 확장 라이브러리에서 제공하는 기능을 사용하여 비대칭 암호화를 구현할 수 있습니다.

샘플 코드는 다음과 같습니다.

$data = 'Hello World'; // 待加密字符串
$res = openssl_pkey_new(); // 生成密钥对
openssl_pkey_export($res, $privateKey); // 获取私钥
$publicKey = openssl_pkey_get_details($res)["key"]; // 获取公钥
openssl_public_encrypt($data, $cipher, $publicKey); // 加密数据
echo base64_encode($cipher); // 输出加密后的字符串

위 코드에서는 먼저 openssl_pkey_new 함수를 사용하여 공개 키와 개인 키 쌍을 생성한 다음 openssl_public_encrypt 함수를 사용하여 데이터를 암호화합니다. 이때 획득한 $publicKey는 공개가 가능하지만, $privateKey는 비밀로 유지되어야 합니다.

복호화 샘플 코드는 다음과 같습니다.

$cipher = base64_decode('RvnOeNe+p8LtlpuUcq0wqFoX2yUaGXvY6FHlWpT0NQwzVQwVcDSnkw4C6YJMvnsMH4N5JDP18RI8x7CFqUCdJg=='); // 加密后的字符串
$privateKey = '-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----'; // 私钥
openssl_private_decrypt($cipher, $plain, $privateKey); // 解密数据
echo $plain; // 输出解密后的字符串

위 코드에서 먼저 openssl_pkey_export 함수를 사용하여 개인 키의 문자열 형식을 얻은 다음 openssl_private_decrypt 함수를 사용하여 암호화된 데이터를 복호화하고 원본 일반 텍스트를 얻습니다.

요약:

위의 소개를 통해 우리는 PHP에서 mcrypt 및 openssl 확장 라이브러리를 사용하여 대칭 및 비대칭 암호화를 구현할 수 있다는 것을 배웠습니다. 애플리케이션 시나리오의 다양한 암호화 요구 사항에 대해 다양한 암호화 알고리즘과 암호화 방법을 사용하도록 유연하게 선택할 수 있습니다. 물론 실제 암호화 과정에서도 데이터 보안을 보장하기 위해 키 보호 및 관리에 주의를 기울여야 합니다.

위 내용은 PHP에서 대칭 및 비대칭 암호화를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.