Tutorial ini menunjukkan cara menyulitkan mesej besar menggunakan kekunci asimetrik dan perpustakaan phpseclib.
penyulitan asimetrik, seperti RSA, menyelesaikan cabaran pengedaran utama dengan menggunakan kunci awam untuk penyulitan dan kunci peribadi untuk penyahsulitan. Ini membolehkan perkongsian kunci awam yang selamat, kerana hanya pemegang kunci swasta yang boleh menyahsulit.
batasan RSA adalah kapasiti plaintext yang terhad; Kunci 2048-bit biasanya mengendalikan maksimum 256 bait.
penyulitan hibrid (menggabungkan kaedah simetri dan asimetrik) mengatasi ini. Kunci simetri menyulitkan mesej, maka kunci simetri ini disulitkan dengan kunci awam penerima dan dilampirkan. Penerima menyahsulit kunci simetri menggunakan kunci peribadi mereka, kemudian menggunakannya untuk menyahsulit mesej.
PHP Secure Communications Library (PHPSeclib) adalah perpustakaan sumber terbuka yang menawarkan pelaksanaan PURE-PHP pelbagai algoritma penyulitan, termasuk algoritma RSA dan simetri (DES, AES). Ia menyokong penyulitan dan fungsi hibrid dengan pasti walaupun tanpa sambungan penyulitan yang lebih cepat.
Algoritma penyulitan menggunakan operasi matematik ke nilai numerik kunci dan plaintext untuk menghasilkan ciphertext. Kekunci yang lebih besar meningkatkan keselamatan.
Pengagihan utama adalah cabaran kritikal: Bagaimana untuk menghantar kunci dengan selamat kepada penerima yang diberi kuasa? Penyelesaiannya bergantung pada algoritma dan jenis utama.
Algoritma dan Kekunci Penyulitan
batasan utama RSA
Penyelesaian optimum menggabungkan penyulitan simetri dan asimetrik:
Penerima membalikkan proses: Dekripsi kunci simetri dengan kunci persendirian mereka, kemudian decrypts mesej.
Contoh ini menggunakan PHP Secure Communications Library (phpseclib). Pasangnya melalui komposer. Dokumentasi berada di https://www.php.cn/link/4662efebaa2ef1b42bbbb1097a941393ef .
$rsa = new Crypt_RSA(); $keys = $rsa->createKey(2048); file_put_contents('key.pri', $keys['privatekey']); file_put_contents('key.pub', $keys['publickey']);
function encrypt_message($plaintext, $asym_key, $key_length = 150) { $rsa = new Crypt_RSA(); $rij = new Crypt_Rijndael(); $sym_key = crypt_random_string($key_length); $rij->setKey($sym_key); $ciphertext = $rij->encrypt($plaintext); $ciphertext = base64_encode($ciphertext); $rsa->loadKey($asym_key); $sym_key = $rsa->encrypt($sym_key); $sym_key = base64_encode($sym_key); $len = strlen($sym_key); $len = dechex($len); $len = str_pad($len, 3, '0', STR_PAD_LEFT); $message = $len . $sym_key . $ciphertext; return $message; }
function decrypt_message($message, $asym_key) { $rsa = new Crypt_RSA(); $rij = new Crypt_Rijndael(); $len = substr($message, 0, 3); $len = hexdec($len); $sym_key = substr($message, 0, $len); $message = substr($message, 3); $ciphertext = substr($message, $len); $ciphertext = base64_decode($ciphertext); $rsa->loadKey($asym_key); $sym_key = base64_decode($sym_key); $sym_key = $rsa->decrypt($sym_key); $rij->setKey($sym_key); $plaintext = $rij->decrypt($ciphertext); return $plaintext; }
Komunikasi data selamat adalah penting. Penyulitan hibrid, memanfaatkan algoritma simetri dan asimetrik, menawarkan penyelesaian yang mantap. Phpseclib menyediakan alat yang boleh dipercayai dan serba boleh untuk melaksanakan pendekatan ini dalam PHP. Kod sumber boleh didapati di GitHub (pautan yang disediakan dalam teks asal).
Atas ialah kandungan terperinci Cara menyulitkan mesej besar dengan kekunci asimetrik dan phpseclib. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!