| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>AES CBC 加密与二维码生成</title>
- <script src="./crypto-js.min.js"></script>
- <script src="./qrcode.min.js"></script>
- <style>
- :root {
- --primary-color: #4a6baf;
- --secondary-color: #6c757d;
- --success-color: #28a745;
- --background-color: #f8f9fa;
- --card-bg: #ffffff;
- --text-color: #343a40;
- --border-radius: 8px;
- --box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
- }
- * {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- }
- html, body {
- width: 100%;
- height: 100%;
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
- background-color: var(--background-color);
- color: var(--text-color);
- }
- .container {
- max-width: 800px;
- margin: 0 auto;
- padding: 2rem;
- display: flex;
- flex-direction: column;
- align-items: center;
- }
- h1 {
- color: var(--primary-color);
- margin-bottom: 2rem;
- text-align: center;
- font-weight: 600;
- }
- .form-group {
- width: 100%;
- max-width: 400px;
- margin-bottom: 1.5rem;
- }
- .input-field {
- width: 100%;
- padding: 12px 15px;
- border: 1px solid #ddd;
- border-radius: var(--border-radius);
- font-size: 16px;
- transition: border-color 0.3s, box-shadow 0.3s;
- margin-bottom: 1rem;
- }
- .input-field:focus {
- border-color: var(--primary-color);
- box-shadow: 0 0 0 3px rgba(74, 107, 175, 0.25);
- outline: none;
- }
- .button-group {
- display: flex;
- gap: 10px;
- margin-bottom: 2rem;
- flex-wrap: wrap;
- justify-content: center;
- }
- .btn {
- padding: 12px 20px;
- border: none;
- border-radius: var(--border-radius);
- cursor: pointer;
- font-size: 16px;
- font-weight: 500;
- transition: background-color 0.3s, transform 0.2s;
- }
- .btn:hover {
- transform: translateY(-2px);
- }
- .btn-primary {
- background-color: var(--primary-color);
- color: white;
- }
- .btn-primary:hover {
- background-color: #3a559c;
- }
- .btn-secondary {
- background-color: var(--secondary-color);
- color: white;
- }
- .btn-secondary:hover {
- background-color: #5a6268;
- }
- .qr-container {
- width: 280px;
- height: 280px;
- background-color: var(--card-bg);
- border-radius: var(--border-radius);
- box-shadow: var(--box-shadow);
- padding: 1rem;
- margin-bottom: 1.5rem;
- }
- #qrcode {
- width: 100%;
- height: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- .result-container {
- width: 100%;
- max-width: 600px;
- background-color: var(--card-bg);
- border-radius: var(--border-radius);
- box-shadow: var(--box-shadow);
- padding: 1rem;
- word-break: break-all;
- margin-top: 1rem;
- }
- .result-label {
- font-weight: 600;
- margin-bottom: 0.5rem;
- color: var(--primary-color);
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h1>AES CBC 加密与二维码生成</h1>
-
- <div class="form-group">
- <input type="text" id="userName" placeholder="用户名" class="input-field">
- <input type="text" id="password" placeholder="密码" class="input-field">
- </div>
-
- <div class="button-group">
- <button onclick="encryptAndGenerateQR()" class="btn btn-primary">加密并生成二维码</button>
- <button onclick="updateUrl()" class="btn btn-secondary">更新URL</button>
- </div>
-
- <div class="qr-container">
- <div id="qrcode"></div>
- </div>
-
- <div class="result-container">
- <div class="result-label">加密结果:</div>
- <div id="AES_str"></div>
- </div>
- </div>
- <script>
- var key = CryptoJS.enc.Utf8.parse("A123061230612306"); // 密钥
- var iv = CryptoJS.enc.Utf8.parse("0000000000000000"); // 固定的IV,16个字符0
- function encryptAndGenerateQR() {
- var userName = document.getElementById("userName").value;
- var password = document.getElementById("password").value;
- var encryptedText;
- if (userName === "UPDATEurl") {
- encryptedText = userName + ";" + password + ";";
- } else {
- // 加密
- var plaintext = "u_name@" + userName + ";" + "u_password@" + password + ";";
- encryptedText = encrypt(plaintext, key, iv);
- }
- // 清除现有的QR码
- clearQRCode();
- // 生成QR码
- generateQRCode(encryptedText);
- // 显示加密文本
- document.getElementById("AES_str").innerHTML = encryptedText;
- console.log("Encrypted text: " + encryptedText);
- }
- function updateUrl() {
- var password = document.getElementById("password").value;
- var encryptedText = "UPDATEurl;" + password + ";";
- // 清除现有的QR码
- clearQRCode();
- // 生成QR码
- generateQRCode(encryptedText);
- // 显示加密文本
- document.getElementById("AES_str").innerHTML = encryptedText;
- }
- function clearQRCode() {
- while (document.getElementById("qrcode").firstChild) {
- document.getElementById("qrcode").removeChild(document.getElementById("qrcode").firstChild);
- }
- }
- function encrypt(plaintext, key, iv) {
- var cipherText = CryptoJS.AES.encrypt(plaintext, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
- return cipherText.toString();
- }
- function decrypt(ciphertext, key, iv) {
- var decryptedBytes = CryptoJS.AES.decrypt(ciphertext, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
- return decryptedBytes.toString(CryptoJS.enc.Utf8);
- }
- function generateQRCode(data) {
- var qr = new QRCode(document.getElementById("qrcode"), {
- text: data,
- width: 256,
- height: 256,
- colorDark: "#000000",
- colorLight: "#ffffff",
- correctLevel: QRCode.CorrectLevel.H
- });
- }
- </script>
- </body>
- </html>
|