Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Melaksanakan Penyulitan dan Pengesahan Dua Hala Mudah dalam PHP?

Bagaimanakah Saya Boleh Melaksanakan Penyulitan dan Pengesahan Dua Hala Mudah dalam PHP?

Mary-Kate Olsen
Lepaskan: 2024-12-24 02:10:13
asal
217 orang telah melayarinya

How Can I Implement Simple Two-Way Encryption and Authentication in PHP?

Penyulitan Dua Hala Paling Mudah menggunakan PHP

Latar Belakang

Awas: Elakkan menyulitkan kata laluan menggunakan kaedah ini; sebaliknya, gunakan algoritma pencincangan kata laluan untuk storan kata laluan yang selamat.

Penyulitan Data Mudah Alih dalam PHP

Apabila menggunakan PHP 5.4 atau lebih baru dan inginkan kemudahalihan kod, gunakan perpustakaan sedia ada yang menyediakan penyulitan yang disahkan. Kaedah Openssl, seperti openssl_encrypt() dan openssl_decrypt(), boleh digunakan sebaik sahaja anda memilih kaedah penyulitan.

Penyulitan dan Penyahsulitan

Pertimbangkan untuk menggunakan Advanced Encryption Standard (AES) dalam Mod CTR untuk penyulitan. Kaedah ini menawarkan keseimbangan terbaik antara keselamatan dan prestasi. Rujuk openssl_get_cipher_methods() untuk mendapatkan senarai kaedah yang disokong.

Pembungkus Penyulitan/Penyahsulitan Mudah menggunakan OpenSSL

Kelas PHP berikut menyediakan pembungkus penyulitan/penyahsulitan mudah menggunakan OpenSSL:

class UnsafeCrypto
{
    const METHOD = 'aes-256-ctr';

    public static function encrypt($message, $key, $encode = false)
    {
        // ...
        if ($encode) {
            return base64_encode($nonce.$ciphertext);
        }
        return $nonce.$ciphertext;
    }

    public static function decrypt($message, $key, $encoded = false)
    {
        // ...
        $plaintext = openssl_decrypt(
            $ciphertext,
            self::METHOD,
            $key,
            OPENSSL_RAW_DATA,
            $nonce
        );
        
        return $plaintext;
    }
}
Salin selepas log masuk

Pengesahan Mudah Wrapper

Untuk keselamatan yang dipertingkatkan, laksanakan pengesahan untuk mengesahkan integriti data yang disulitkan:

class SaferCrypto extends UnsafeCrypto
{
    const HASH_ALGO = 'sha256';

    public static function encrypt($message, $key, $encode = false)
    {
        // ...
        if ($encode) {
            return base64_encode($mac.$ciphertext);
        }
        // Prepend MAC to the ciphertext and return to caller
        return $mac.$ciphertext;
    }

    public static function decrypt($message, $key, $encoded = false)
    {
        // ...
        $calculated = hash_hmac(
            self::HASH_ALGO,
            $ciphertext,
            $authKey,
            true
        );
        
        if (!self::hashEquals($mac, $calculated)) {
            throw new Exception('Encryption failure');
        }
        
        // Pass to UnsafeCrypto::decrypt
        $plaintext = parent::decrypt($ciphertext, $encKey);
        
        return $plaintext;
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Penyulitan dan Pengesahan Dua Hala Mudah dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan