>백엔드 개발 >PHP 튜토리얼 >PHP의 암호화 및 복호화 기술

PHP의 암호화 및 복호화 기술

王林
王林원래의
2023-05-11 08:03:052439검색

PHP는 널리 사용되는 웹 개발 언어이며, PHP의 암호화 및 복호화 기술은 데이터 보안에 있어 매우 중요합니다. 이 글에서는 PHP의 암호화 및 복호화 기술을 소개하고 웹 애플리케이션에서의 실제 적용을 살펴보겠습니다.

1. 암호화 기술

암호화 기술은 일반 텍스트를 암호화된 텍스트로 변환하는 프로세스입니다. PHP에서는 사용자 로그인 정보, 거래 데이터 등 전송되는 데이터의 보안을 보장하기 위해 암호화 기술이 주로 사용됩니다. PHP의 일반적인 암호화 기술은 다음과 같습니다.

  1. 해시 암호화

해시 암호화는 특정 알고리즘을 통해 임의 길이의 입력(메시지라고도 함)을 고정 길이 출력으로 변환하는 것입니다. 조건:

a 동일한 입력에 대해 알고리즘은 출력이 동일한지 확인해야 합니다.
b. 다른 입력에 대해 알고리즘은 출력이 다른지 확인해야 합니다.

PHP에서 일반적으로 사용되는 해시 암호화 함수에는 md5(), sha1() 등이 있습니다. md5() 함수는 모든 길이의 입력 문자열을 128비트 출력으로 변환하고 이를 32비트 16진수 문자열로 반환합니다.

예를 들어 다음 코드는 "Hello World" 문자열을 암호화된 문자열로 변환할 수 있습니다.

<?php
$orig_str = "Hello World";
$encrypted_str = md5($orig_str);
echo "加密前的字符串:$orig_str <br>";
echo "加密后的字符串:$encrypted_str";
?>
  1. 대칭 암호화

대칭 암호화는 동일한 키를 사용하여 데이터를 암호화하고 해독하는 암호화 기술입니다. PHP에서는 mcrypt() 함수를 사용하여 대칭 암호화 작업을 수행합니다. mcrypt()는 DES, TripleDES, Blowfish, AES 등과 같은 매우 일반적인 암호화 알고리즘을 사용합니다.

다음 코드는 대칭 암호화에 mcrypt() 함수를 사용하는 방법을 보여줍니다.

<?php
$key = '0123456789abcdef'; // 密钥
$input = 'Hello World'; // 加密前的字符串
$td = mcrypt_module_open('rijndael-128', '', 'cbc', ''); // 初始化加密模型
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); // 初始化随机向量
mcrypt_generic_init($td, $key, $iv); // 初始化加密
$encrypted = mcrypt_generic($td, $input); // 进行加密操作
mcrypt_generic_deinit($td); // 结束加密
mcrypt_module_close($td); // 关闭加密模型
echo "加密前的字符串: $input <br>";
echo "加密后的字符串: ".base64_encode($encrypted)."<br>"; // 输出加密结果
?>
  1. 비대칭 암호화

비대칭 암호화는 암호화와 복호화에 서로 다른 키를 사용하는 알고리즘입니다. PHP에서 일반적으로 사용되는 비대칭 암호화 알고리즘은 RSA입니다. 암호화 및 복호화에 RSA 알고리즘을 사용하는 경우 공개 키와 개인 키, 두 개의 키가 필요합니다. 일반적으로 공개 키는 공개되는 반면 개인 키는 소유자만 알 수 있습니다.

다음 코드는 PHP의 암호화 및 복호화에 RSA 알고리즘을 사용하는 방법을 보여줍니다.

<?php
$data = 'Hello World';
// 生成RSA公钥,并将公钥保存到public.key文件中
$res = openssl_pkey_new();
openssl_pkey_export($res, $privkey); // 生成私钥并保存
$pubkey = openssl_pkey_get_details($res);
$pubkey = $pubkey["key"];
file_put_contents("public.key", $pubkey);
// 使用RSA公钥加密数据
openssl_public_encrypt($data, $encrypted, $pubkey);
echo "加密前的数据:$data <br>";
echo "加密后的数据:$encrypted <br>";
// 使用RSA私钥解密数据
openssl_pkey_get_private($privkey);
openssl_private_decrypt($encrypted, $decrypted, $privkey);
echo "解密后的数据:$decrypted <br>";
?>

2. 복호화 기술

복호화 기술은 암호화된 데이터를 복원하는 프로세스입니다. PHP에서는 사용자 로그인 정보, 거래 데이터 등 전송되는 데이터의 보안을 보장하기 위해 복호화 기술이 주로 사용됩니다. PHP의 일반적인 암호 해독 기술은 다음과 같습니다.

  1. 해시 암호 해독

해시 암호화는 되돌릴 수 없는 암호화 기술이므로 해독할 수 없습니다.

  1. 대칭 복호화

대칭형 복호화는 동일한 키를 사용하여 데이터를 복호화하는 암호화 기술입니다. PHP에서는 mcrypt() 함수를 사용하여 대칭 암호 해독 작업을 수행합니다.

다음 코드는 대칭 복호화에 mcrypt() 함수를 사용하는 방법을 보여줍니다.

<?php
$key = '0123456789abcdef'; // 密钥
$input = 'vO8v4zinwuL6qvtSRWdq3g=='; // 加密后的字符串
$td = mcrypt_module_open('rijndael-128', '', 'cbc', ''); // 初始化加密模型
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); // 初始化随机向量
mcrypt_generic_init($td, $key, $iv); // 初始化加密
$decrypted = mdecrypt_generic($td, base64_decode($input)); // 进行解密操作
mcrypt_generic_deinit($td); // 结束加密
mcrypt_module_close($td); // 关闭加密模型
echo "解密前的字符串: $input <br>";
echo "解密后的字符串: $decrypted"; // 输出解密结果
?>
  1. 비대칭 복호화

비대칭 복호화는 암호화와 복호화에 서로 다른 키를 사용하는 알고리즘입니다. PHP에서 일반적으로 사용되는 비대칭 복호화 알고리즘은 RSA입니다.

다음 코드는 PHP에서 복호화를 위해 RSA 알고리즘을 사용하는 방법을 보여줍니다.

<?php
$data = 'Hello World';
// 使用RSA公钥加密数据
$pubkey = file_get_contents("public.key");
openssl_public_encrypt($data, $encrypted, $pubkey);
echo "加密前的数据:$data <br>";
echo "加密后的数据:$encrypted <br>";
// 使用RSA私钥解密数据
$privkey = file_get_contents("private.key");
openssl_private_decrypt($encrypted, $decrypted, $privkey);
echo "解密后的数据:$decrypted <br>";
?>

3. 응용 예제

실제 웹 개발에서 암호화 및 복호화 기술은 데이터 보안을 보장하는 중요한 수단입니다. 다음에서는 사용자 로그인 애플리케이션 예제를 사용하여 암호화 및 암호 해독 기술을 사용하여 사용자 로그인 정보를 보호하는 방법을 보여줍니다.

  1. 프런트엔드 양식

프런트엔드 페이지에서는 사용자의 로그인 정보를 얻기 위한 양식을 만들어야 합니다. 양식에는 사용자 이름과 비밀번호를 입력하는 두 개의 입력 상자가 있습니다.

<form method="post" action="login.php">
    <label>用户名:</label>
    <input type="text" name="username"><br>
    <label>密码:</label>
    <input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>
  1. 백엔드 로그인 확인

PHP 코드에서는 사용자가 입력한 사용자 이름과 비밀번호를 확인해야 합니다. 확인이 통과되면 사용자의 암호화된 정보가 다음 페이지에서 사용할 수 있도록 세션에 저장될 수 있습니다.

<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
// 数据库连接等相关代码省略
// 检查用户名和密码是否匹配
if ($username == $db_username && $password == $db_password) {
    // 生成加密后的用户信息
    $userinfo = array(
        'username' => $username,
        'password' => $password
    );
    $encrypted = base64_encode(serialize($userinfo));
    // 将加密后的用户信息保存到Session中
    $_SESSION['userinfo'] = $encrypted;
    // 登录成功,跳转到首页
    header("Location: index.php");
} else {
    // 登录失败,返回错误消息
    echo "用户名或密码错误!";
}
?>
  1. 백엔드 홈페이지

백엔드 홈페이지에서는 Session에 저장된 암호화된 사용자 정보를 복호화하고 사용자 이름 및 기타 정보를 표시하는 작업이 필요합니다.

<?php
session_start();
if (isset($_SESSION['userinfo'])) {
    // 从Session中获取加密后的用户信息
    $encrypted = $_SESSION['userinfo'];
    // 解密用户信息
    $userinfo = unserialize(base64_decode($encrypted));
    $username = $userinfo['username'];
    echo "欢迎您,$username!";
} else {
    // 用户未登录,跳转到登录页
    header("Location: login.php");
}
?>

요약하자면 암호화 및 복호화 기술은 PHP에서 중요한 응용 가치를 갖습니다. 웹 개발 과정에서는 사용자 데이터의 보안을 보장하는 것이 중요합니다. 개발자는 데이터 보안을 강화하기 위해 실제 요구 사항에 따라 적절한 암호화 및 암호 해독 기술을 선택해야 합니다.

위 내용은 PHP의 암호화 및 복호화 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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