ホームページ >バックエンド開発 >PHPチュートリアル >PHP の暗号化および復号化テクノロジ

PHP の暗号化および復号化テクノロジ

王林
王林オリジナル
2023-05-11 08:03:052439ブラウズ

PHP は広く使用されている Web 開発言語であり、その暗号化および復号化テクノロジはデータ セキュリティにおいて非常に重要です。この記事では、PHP の暗号化と復号化テクノロジを紹介し、Web アプリケーションでの実際の応用を検討します。

1. 暗号化技術

暗号化技術は、通常のテキストを暗号化されたテキストに変換するプロセスです。 PHP では、主にユーザーのログイン情報やトランザクションデータなど、送信されるデータのセキュリティを確保するために暗号化技術が使用されます。 PHP の一般的な暗号化テクノロジは次のとおりです。

  1. ハッシュ暗号化

ハッシュ暗号化は、特定のアルゴリズムを通じて任意の長さの入力 (メッセージとも呼ばれます) を変換することです。固定長出力の場合、アルゴリズムは次の 2 つの条件を満たします:

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 アルゴリズムを使用して暗号化と復号化を行う場合は、公開キーと秘密キーの 2 つのキーが必要です。一般に、公開キーは公開されていますが、秘密キーは所有者のみが知っています。

次のコードは、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. アプリケーション例

実際の Web 開発では、暗号化および復号化テクノロジが保証されています。データセキュリティの重要な手段。以下では、ユーザー ログイン アプリケーションの例を使用して、暗号化および復号化テクノロジを使用してユーザー ログイン情報を保護する方法を示します。

  1. フロントエンド フォーム

フロントエンド ページでは、ユーザーのログイン情報を取得するフォームを作成する必要があります。フォームには、ユーザー名とパスワードの 2 つの入力ボックスが含まれています:

<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. バックエンド ホームページ

バックエンド ホームページでは、セッションに保存された暗号化されたユーザー情報を復号し、ユーザー名などの情報を表示する必要があります。

<?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 において重要なアプリケーション価値を持っています。 Web 開発プロセスでは、ユーザー データのセキュリティを確保することが重要であり、開発者はデータのセキュリティを強化するために、実際のニーズに基づいて適切な暗号化および復号化テクノロジを選択する必要があります。

以上がPHP の暗号化および復号化テクノロジの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。