Rumah >pembangunan bahagian belakang >tutorial php >Teknologi penyulitan dan penyahsulitan dalam PHP

Teknologi penyulitan dan penyahsulitan dalam PHP

王林
王林asal
2023-05-11 08:03:052439semak imbas

PHP ialah bahasa pembangunan web yang digunakan secara meluas, dan teknologi penyulitan dan penyahsulitannya sangat penting dalam keselamatan data. Artikel ini akan memperkenalkan teknologi penyulitan dan penyahsulitan dalam PHP dan meneroka aplikasi praktikalnya dalam aplikasi web.

1. Teknologi Penyulitan

Teknologi penyulitan ialah proses menukar teks biasa kepada teks yang disulitkan. Dalam PHP, teknologi penyulitan digunakan terutamanya untuk memastikan keselamatan data yang dihantar, seperti maklumat log masuk pengguna, data transaksi, dll. Teknologi penyulitan biasa dalam PHP adalah seperti berikut:

  1. Penyulitan cincang

Penyulitan cincang ialah untuk menukar input dalam sebarang panjang (juga dipanggil mesej) melalui algoritma tertentu. Untuk keluaran panjang tetap, algoritma memenuhi dua syarat berikut:

a Untuk input yang sama, algoritma mesti memastikan bahawa output adalah sama; mesti memastikan bahawa output adalah berbeza.

Fungsi penyulitan cincang yang biasa digunakan dalam PHP termasuk md5(), sha1(), dsb. Fungsi md5() menukar rentetan input dengan sebarang panjang kepada output 128-bit dan mengembalikannya sebagai rentetan perenambelasan 32-bit.

Sebagai contoh, kod berikut boleh menukar rentetan "Hello World" menjadi rentetan yang disulitkan:

<?php
$orig_str = "Hello World";
$encrypted_str = md5($orig_str);
echo "加密前的字符串:$orig_str <br>";
echo "加密后的字符串:$encrypted_str";
?>

    Penyulitan simetri
Penyulitan simetri Ia adalah teknologi penyulitan yang menggunakan kunci yang sama untuk menyulitkan dan menyahsulit data. Dalam PHP, gunakan fungsi mcrypt() untuk melaksanakan operasi penyulitan simetri. mcrypt() menggunakan algoritma penyulitan yang sangat biasa, seperti DES, TripleDES, Blowfish, AES, dll.

Kod berikut menunjukkan cara menggunakan fungsi mcrypt() untuk penyulitan simetri:

<?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>"; // 输出加密结果
?>

    Penyulitan asimetri
Penyulitan asimetri ialah penggunaan Kekunci yang berbeza digunakan untuk algoritma penyulitan dan penyahsulitan. Algoritma penyulitan asimetri yang biasa digunakan dalam PHP ialah RSA. Apabila menggunakan algoritma RSA untuk penyulitan dan penyahsulitan, dua kunci, kunci awam dan kunci persendirian, diperlukan. Secara amnya, kunci awam adalah awam, manakala kunci persendirian hanya diketahui oleh pemegangnya.

Kod berikut menunjukkan penggunaan algoritma RSA untuk penyulitan dan penyahsulitan dalam PHP:

<?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 Teknologi penyahsulitan

Teknologi penyahsulitan memulihkan proses data yang disulitkan. Dalam PHP, teknologi penyahsulitan digunakan terutamanya untuk memastikan keselamatan data yang dihantar, seperti maklumat log masuk pengguna, data transaksi, dll. Teknologi penyahsulitan biasa dalam PHP adalah seperti berikut:

    Penyahsulitan cincang
Penyulitan cincang ialah teknologi penyulitan tidak boleh balik dan tidak boleh dinyahsulit.

    Penyahsulitan simetri
Penyahsulitan simetri ialah teknologi penyulitan yang menggunakan kunci yang sama untuk menyahsulit data. Dalam PHP, gunakan fungsi mcrypt() untuk melaksanakan operasi penyahsulitan simetri.

Kod berikut menunjukkan cara menggunakan fungsi mcrypt() untuk penyahsulitan simetri:

<?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"; // 输出解密结果
?>

    Penyahsulitan asimetri
Penyahsulitan asimetrik ialah cara untuk menggunakan Kekunci yang berbeza digunakan untuk algoritma penyulitan dan penyahsulitan. Dalam PHP, algoritma penyahsulitan asimetri yang biasa digunakan ialah RSA.

Kod berikut menunjukkan penggunaan algoritma RSA untuk penyahsulitan dalam PHP:

<?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 Contoh aplikasi

Dalam pembangunan Web sebenar, teknologi penyulitan dan penyahsulitan adalah jaminan. cara penting keselamatan data. Berikut akan menggunakan contoh aplikasi log masuk pengguna untuk menunjukkan cara menggunakan teknologi penyulitan dan penyahsulitan untuk melindungi maklumat log masuk pengguna.

    Borang hadapan
Di halaman hujung hadapan, anda perlu mencipta borang untuk mendapatkan maklumat log masuk pengguna. Borang ini mengandungi dua kotak input untuk nama pengguna dan kata laluan:

<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>

    Pengesahan log masuk belakang
Dalam kod PHP, nama pengguna dan kata laluan yang dimasukkan oleh pengguna perlu disahkan . Jika pengesahan diluluskan, maklumat yang disulitkan pengguna boleh disimpan dalam Sesi untuk digunakan pada halaman berikutnya.

<?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 "用户名或密码错误!";
}
?>

    Backend homepage
Dalam halaman utama backend, anda perlu menyahsulit maklumat pengguna yang disulitkan yang disimpan dalam Sesi dan memaparkan nama pengguna dan maklumat lain.

<?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");
}
?>

Ringkasnya, teknologi penyulitan dan penyahsulitan mempunyai nilai aplikasi yang penting dalam PHP. Dalam proses pembangunan web, adalah penting untuk memastikan keselamatan data pengguna Pembangun perlu memilih teknologi penyulitan dan penyahsulitan yang sesuai berdasarkan keperluan sebenar untuk mengukuhkan keselamatan data.

Atas ialah kandungan terperinci Teknologi penyulitan dan penyahsulitan dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn