如何在 HTML5 中定義金鑰對生成器欄位?


金鑰對生成器欄位是 HTML5 中的一種輸入欄位,允許使用者建立用於加密的公鑰和私鑰組合。此欄位在需要安全通訊的情況下非常有用,例如網上銀行或電子商務平臺。使用者可以使用金鑰對生成器欄位生成唯一的金鑰組合,用於加密和解密私人資訊,從而確保其互動的安全性和完整性。

在 HTML5 中,可以使用“input”元素,並將“type”屬性設定為“keygen”來建立金鑰對生成器欄位。“name”屬性用於為欄位提供唯一的名稱,“challenge”屬性用於指定伺服器端質詢字串以增強安全性。當用戶提交表單時,瀏覽器會建立一個公鑰和私鑰對,並將公鑰傳送到伺服器,私鑰保留在使用者的裝置上。然後,伺服器可以使用公鑰加密機密資訊,然後再將其傳送給使用者,使用者可以使用其私鑰解密資訊。

方法

在 HTML5 中,有幾種方法可以定義金鑰對生成器欄位。

它們是:

  • 使用“KeyGen”元素

  • 使用 JavaScript 庫

  • 使用 Web Crypto API

現在讓我們詳細瞭解每種方法及其示例。

方法 1:使用“KeyGen”元素

在 HTML5 中定義金鑰對生成器欄位的第一種方法是使用“KeyGen”元素。這是 HTML5 標準方法,它包括使用“keygen”元素以及“name”和“challenge”屬性來建立金鑰對生成器欄位。但是,此方法並非所有平臺都支援,並且在較舊的瀏覽器中可能無法正常工作。

示例

在這裡,我們將介紹一個實現此方法的示例:

<!DOCTYPE html>
<html>
<head>
   <title>Key-Pair Generator Field Example</title>
</head>
<body>
   <form action="submit-form.php" method="post">
      <label for="keypair">Key-Pair:</label>
      <input type="keygen" name="keypair" id="keypair" challenge="mychallengestring">
      <input type="submit" value="Submit">
   </form>
</body>
</html>

方法 2:使用 JavaScript 庫

在 HTML5 中定義金鑰對生成器欄位的第二種方法是使用 JavaScript 庫。這是 HTML5 標準方法,它包括使用“keygen”元素以及“name”和“challenge”屬性來建立金鑰對生成器欄位。但是,此方法並非所有平臺都支援,並且在較舊的瀏覽器中可能無法正常工作。

示例

在這裡,我們將介紹一個實現此方法的示例:

<!DOCTYPE html>
<html> 
<head>
   <title>Key-Pair Generator Field Example (JavaScript Library Approach)</title>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/forge/0.10.0/forge.min.js"></script>
   <!-- Include the Forge library from a CDN -->
</head>
<body>
   <form action="submit-form.php" method="post" onsubmit="return generateKeyPair();">
      <label for="publickey">Public Key:</label>
      <input type="text" name="publickey" id="publickey">
      <input type="submit" value="Submit">
   </form>
   <script>
      function generateKeyPair() {
         var keypair = forge.pki.rsa.generateKeyPair({bits: 2048});
         var publicKeyPem = forge.pki.publicKeyToPem(keypair.publicKey);
         document.getElementById("publickey").value = publicKeyPem;
         return true;
      }
   </script>
</body>
</html>

方法 3:使用 Web Crypto API

在 HTML5 中定義金鑰對生成器欄位的第三種方法是使用 Web Crypto API。Web Crypto API 是一個較新的標準,它提供了一組用於金鑰生成和操作的加密方法。此方法非常安全,併為金鑰生成提供標準化的介面;但是,並非所有瀏覽器都支援它。

示例

在這裡,我們將介紹一個實現此方法的示例:

<!DOCTYPE html>
<html>
<head>
   <title>Key-Pair Generator Field Example (Web Crypto API Approach)</title>
</head>
<body>
   <form action="submit-form.php" method="post" onsubmit="return generateKeyPair();">
      <label for="publickey">Public Key:</label>
      <input type="text" name="publickey" id="publickey">
      <input type="submit" value="Submit">
   </form>
   <script>
      async function generateKeyPair() {
         const keyPair = await window.crypto.subtle.generateKey(
            {
               name: "RSA-OAEP",
               modulusLength: 2048,
               publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
               hash: {name: "SHA-256"}
            },
            true,
               ["encrypt", "decrypt"]
         );
         const publicKey = await window.crypto.subtle.exportKey("spki", keyPair.publicKey);
         const publicKeyPem = pemFromPublicKey(publicKey);
         document.getElementById("publickey").value = publicKeyPem;
         return true;
      }
      function pemFromPublicKey(publicKey) {
         const exported = String.fromCharCode.apply(null, new Uint8Array(publicKey));
         const exported64 = btoa(exported);
         const pemExported = `-----BEGIN PUBLIC KEY-----
${exported64}
----- END PUBLIC KEY-----`; return pemExported; } </script> </body> </html>

結論

在 HTML5 中實現金鑰對生成器欄位有幾種方法,每種方法都有其自身的優缺點。第一種方法使用“keygen”元素,是最簡單的實現方法,不需要額外的程式碼。但是,它只支援少數瀏覽器,並且不允許修改。

第二種方法使用 JavaScript 庫(例如 Forge),提供了更多的自定義選項,並且可以在較舊的瀏覽器中使用。但是,需要建立和新增到網站的額外程式碼。

第三種方法使用 Web Crypto API,是最安全的,並提供最多的自定義選項。但是,它需要更多程式碼,並且可能與較舊的平臺不相容。

更新於:2023年3月24日

253 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告