index.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>AES CBC 加密与二维码生成</title>
  7. <script src="./crypto-js.min.js"></script>
  8. <script src="./qrcode.min.js"></script>
  9. <style>
  10. :root {
  11. --primary-color: #4a6baf;
  12. --secondary-color: #6c757d;
  13. --success-color: #28a745;
  14. --background-color: #f8f9fa;
  15. --card-bg: #ffffff;
  16. --text-color: #343a40;
  17. --border-radius: 8px;
  18. --box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  19. }
  20. * {
  21. box-sizing: border-box;
  22. margin: 0;
  23. padding: 0;
  24. }
  25. html, body {
  26. width: 100%;
  27. height: 100%;
  28. font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  29. background-color: var(--background-color);
  30. color: var(--text-color);
  31. }
  32. .container {
  33. max-width: 800px;
  34. margin: 0 auto;
  35. padding: 2rem;
  36. display: flex;
  37. flex-direction: column;
  38. align-items: center;
  39. }
  40. h1 {
  41. color: var(--primary-color);
  42. margin-bottom: 2rem;
  43. text-align: center;
  44. font-weight: 600;
  45. }
  46. .form-group {
  47. width: 100%;
  48. max-width: 400px;
  49. margin-bottom: 1.5rem;
  50. }
  51. .input-field {
  52. width: 100%;
  53. padding: 12px 15px;
  54. border: 1px solid #ddd;
  55. border-radius: var(--border-radius);
  56. font-size: 16px;
  57. transition: border-color 0.3s, box-shadow 0.3s;
  58. margin-bottom: 1rem;
  59. }
  60. .input-field:focus {
  61. border-color: var(--primary-color);
  62. box-shadow: 0 0 0 3px rgba(74, 107, 175, 0.25);
  63. outline: none;
  64. }
  65. .button-group {
  66. display: flex;
  67. gap: 10px;
  68. margin-bottom: 2rem;
  69. flex-wrap: wrap;
  70. justify-content: center;
  71. }
  72. .btn {
  73. padding: 12px 20px;
  74. border: none;
  75. border-radius: var(--border-radius);
  76. cursor: pointer;
  77. font-size: 16px;
  78. font-weight: 500;
  79. transition: background-color 0.3s, transform 0.2s;
  80. }
  81. .btn:hover {
  82. transform: translateY(-2px);
  83. }
  84. .btn-primary {
  85. background-color: var(--primary-color);
  86. color: white;
  87. }
  88. .btn-primary:hover {
  89. background-color: #3a559c;
  90. }
  91. .btn-secondary {
  92. background-color: var(--secondary-color);
  93. color: white;
  94. }
  95. .btn-secondary:hover {
  96. background-color: #5a6268;
  97. }
  98. .qr-container {
  99. width: 280px;
  100. height: 280px;
  101. background-color: var(--card-bg);
  102. border-radius: var(--border-radius);
  103. box-shadow: var(--box-shadow);
  104. padding: 1rem;
  105. margin-bottom: 1.5rem;
  106. }
  107. #qrcode {
  108. width: 100%;
  109. height: 100%;
  110. display: flex;
  111. justify-content: center;
  112. align-items: center;
  113. }
  114. .result-container {
  115. width: 100%;
  116. max-width: 600px;
  117. background-color: var(--card-bg);
  118. border-radius: var(--border-radius);
  119. box-shadow: var(--box-shadow);
  120. padding: 1rem;
  121. word-break: break-all;
  122. margin-top: 1rem;
  123. }
  124. .result-label {
  125. font-weight: 600;
  126. margin-bottom: 0.5rem;
  127. color: var(--primary-color);
  128. }
  129. </style>
  130. </head>
  131. <body>
  132. <div class="container">
  133. <h1>AES CBC 加密与二维码生成</h1>
  134. <div class="form-group">
  135. <input type="text" id="userName" placeholder="用户名" class="input-field">
  136. <input type="text" id="password" placeholder="密码" class="input-field">
  137. </div>
  138. <div class="button-group">
  139. <button onclick="encryptAndGenerateQR()" class="btn btn-primary">加密并生成二维码</button>
  140. <button onclick="updateUrl()" class="btn btn-secondary">更新URL</button>
  141. </div>
  142. <div class="qr-container">
  143. <div id="qrcode"></div>
  144. </div>
  145. <div class="result-container">
  146. <div class="result-label">加密结果:</div>
  147. <div id="AES_str"></div>
  148. </div>
  149. </div>
  150. <script>
  151. var key = CryptoJS.enc.Utf8.parse("A123061230612306"); // 密钥
  152. var iv = CryptoJS.enc.Utf8.parse("0000000000000000"); // 固定的IV,16个字符0
  153. function encryptAndGenerateQR() {
  154. var userName = document.getElementById("userName").value;
  155. var password = document.getElementById("password").value;
  156. var encryptedText;
  157. if (userName === "UPDATEurl") {
  158. encryptedText = userName + ";" + password + ";";
  159. } else {
  160. // 加密
  161. var plaintext = "u_name@" + userName + ";" + "u_password@" + password + ";";
  162. encryptedText = encrypt(plaintext, key, iv);
  163. }
  164. // 清除现有的QR码
  165. clearQRCode();
  166. // 生成QR码
  167. generateQRCode(encryptedText);
  168. // 显示加密文本
  169. document.getElementById("AES_str").innerHTML = encryptedText;
  170. console.log("Encrypted text: " + encryptedText);
  171. }
  172. function updateUrl() {
  173. var password = document.getElementById("password").value;
  174. var encryptedText = "UPDATEurl;" + password + ";";
  175. // 清除现有的QR码
  176. clearQRCode();
  177. // 生成QR码
  178. generateQRCode(encryptedText);
  179. // 显示加密文本
  180. document.getElementById("AES_str").innerHTML = encryptedText;
  181. }
  182. function clearQRCode() {
  183. while (document.getElementById("qrcode").firstChild) {
  184. document.getElementById("qrcode").removeChild(document.getElementById("qrcode").firstChild);
  185. }
  186. }
  187. function encrypt(plaintext, key, iv) {
  188. var cipherText = CryptoJS.AES.encrypt(plaintext, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
  189. return cipherText.toString();
  190. }
  191. function decrypt(ciphertext, key, iv) {
  192. var decryptedBytes = CryptoJS.AES.decrypt(ciphertext, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
  193. return decryptedBytes.toString(CryptoJS.enc.Utf8);
  194. }
  195. function generateQRCode(data) {
  196. var qr = new QRCode(document.getElementById("qrcode"), {
  197. text: data,
  198. width: 256,
  199. height: 256,
  200. colorDark: "#000000",
  201. colorLight: "#ffffff",
  202. correctLevel: QRCode.CorrectLevel.H
  203. });
  204. }
  205. </script>
  206. </body>
  207. </html>