首頁 >後端開發 >php教程 >如何使用不對稱密鑰和phpseclib加密大型消息

如何使用不對稱密鑰和phpseclib加密大型消息

Christopher Nolan
Christopher Nolan原創
2025-02-18 09:11:12383瀏覽

本教程演示瞭如何使用不對稱鍵和phpseclib庫加密大型消息。


How to Encrypt Large Messages with Asymmetric Keys and phpseclib 鍵概念

>不對稱加密(例如RSA)通過採用公共密鑰加密和解密的私鑰來解決關鍵分配挑戰。 這允許安全的公共密鑰共享,因為只有專用密鑰持有人才能解密。

> RSA的限制是其限制的明文容量; 2048位密鑰通常處理最多256個字節。

混合加密(結合對稱和不對稱方法)克服了這一點。 對稱鍵加密消息,然後將此對稱密鑰加密使用收件人的公鑰並附加。收件人使用其私鑰解密對稱鍵,然後使用它解密消息。 PHP安全通信庫(PHPSECLIB)是一個免費的開源庫,可提供各種加密算法的純PHP實現,包括RSA和對稱算法(DES,AES)。它即使沒有更快的加密擴展也可靠地支持混合加密和功能。

>

簡介

在傳輸之前對敏感數據進行加密至關重要。加密使用鍵和算法將明文(正常數據)轉換為密文(秘密數據)。解密逆轉了此過程。

>加密算法將數學操作應用於密鑰和宣傳值的數值,以產生密文。 較大的密鑰增強了安全性。

密鑰分佈是一個關鍵的挑戰:如何將密鑰安全地傳輸到授權收件人? 該解決方案取決於算法和密鑰類型。

加密算法和鍵

存在兩種主要加密算法類型:

>對稱算法:使用相同的加密和解密鍵。 鑰匙交換是一個漏洞。

    不對稱算法:
  1. >使用單獨的公共和私鑰。 使用公共密鑰加密的數據只能使用相應的私鑰解密。 這解決了關鍵分佈問題,因為可以共享公共密鑰而不會損害安全性。 選擇加密算法
  2. 強算法依賴於高級數學。 強度取決於沒有密鑰的解密所需的時間。 國家標準技術研究所(NIST)提供了建議。 常見的不對稱算法包括RSA和DSA,由於其可伸縮性,RSA通常在商業上首選。 Rijndael(AES)是一種廣泛使用的對稱算法。 > RSA密鑰限制
  3. 雖然不對稱算法求解鍵分佈,但RSA具有有限的明文加密能力。 2048位鍵可能只加密高達256個字節。 >

    解決方案:混合加密

    >

    最佳解決方案結合了對稱和非對稱加密:>

    1. 對稱加密:>用隨機生成的對稱鍵加密大消息。
    2. 非對稱加密:使用收件人的公鑰加密對稱鍵。
    3. 傳輸:將加密消息和加密的對稱鍵發送給收件人。
    4. 收件人逆轉過程:用私鑰解密對稱鍵,然後解密消息。
    用phpseclib

    實現

    >此示例使用PHP安全通信庫(PHPSECLIB)。 通過作曲家安裝它。 文檔位於

    > https://www.php.cn/link/4662efebaa2ef1b42bbbbb1097a94139393ef

    >。

    生成密鑰

    加密函數

    <code class="language-php">$rsa = new Crypt_RSA();
    $keys = $rsa->createKey(2048);
    
    file_put_contents('key.pri', $keys['privatekey']);
    file_put_contents('key.pub', $keys['publickey']);</code>
    解密函數

    <code class="language-php">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;
    }</code>
    結論

    安全數據通信至關重要。 利用對稱算法和不對稱算法的混合加密提供了強大的解決方案。 Phpseclib提供了一種可靠且通用的工具,用於在PHP中實現此方法。 源代碼可在GitHub上找到(原始文本中提供的鏈接)。
    <code class="language-php">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;
    }</code>
    >

以上是如何使用不對稱密鑰和phpseclib加密大型消息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn