JSFiddle - React, Tailwind, and code Playground

by ph822720355

HTML

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>URL Token 產生器</title>
  <!-- 載入 CryptoJS CDN -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
  <script>
    /**
     * AES 加密函式
     * 使用固定的 key 與 iv 進行 CBC 模式加密
     * @param {string} payload - 要加密的字串
     * @returns {string} - 加密後的字串 (Base64 格式)
     */
    function stringAddAES(payload) {
      // 轉換金鑰與初始向量
      let key = CryptoJS.enc.Utf8.parse('jjuyobohdjjjugztodezdezepiwspjgo');
      let iv = CryptoJS.enc.Utf8.parse('jjuyobohdjjjugzj');
      // 將輸入字串轉成 WordArray
      let srcs = CryptoJS.enc.Utf8.parse(payload);
      // 執行 AES CBC 模式加密,使用 Pkcs7 padding
      let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
      return encrypted.toString();
    }

    /**
     * 產生 URL Token
     * 組合 serverKey 與當前時間戳記,並利用 AES 加密,再以 Base64 格式回傳
     * @param {string} serverKey - 使用者輸入的 ServerKey
     * @returns {string} - 加密後的 UrlToken
     */
    function getUrlToken(serverKey) {
      // 組合 payload:ServerKey 與當前時間戳記
      let payload = serverKey + '&' + new Date().getTime();
      // 執行 AES 加密
      let encryptPayload = stringAddAES(payload);
      // 將加密後的字串轉成 Utf8 的 WordArray
      var wordArray = CryptoJS.enc.Utf8.parse(encryptPayload);
      // 轉換成 Base64 編碼
      var base64 = CryptoJS.enc.Base64.stringify(wordArray);
      return base64;
    }

    /**
     * 讀取頁面上輸入的 ServerKey 並顯示產生的 UrlToken
     */
    function generateToken() {
      var serverKey = document.getElementById('serverKey').value;
      if (serverKey.trim() === "") {
        alert("請輸入 ServerKey");
        return;
      }
      var token = getUrlToken(serverKey);
      document.getElementById('urlToken').innerText = token;
    }
  </script>
</head>
<body>
  <h1>URL Token 產生器</h1>
  <label for="serverKey">請輸入 ServerKey:</label>
  <input type="text" id="serverKey" placeholder="輸入 ServerKey">
  <button...