如何用JavaScript加密密码并在Java后端解密实现登录
登录系统:前端JS加密+Java后端解密实现方案
前端实现(HTML + JavaScript)
使用CryptoJS实现客户端密码加密,代码如下:
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script> <h1>Login</h1> <form id="loginForm"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <br><br> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <br><br> <button type="button" id="submitButton">Submit</button> </form> <script> document.getElementById("submitButton").addEventListener("click", function () { const username = document.getElementById("username").value; const password = document.getElementById("password").value; if (!username || !password) { alert("请填写所有字段!"); return; } // 加密密钥,需与后端保持一致 const secretKey = "mySecretKey12345"; // 使用CryptoJS AES加密密码 const encryptedPassword = CryptoJS.AES.encrypt(password, secretKey).toString(); // 发送加密后的账号密码到后端 fetch("http://localhost:8080/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: username, password: encryptedPassword }) }) .then(response => response.json()) .then(data => { if (data.success) { alert("登录成功!"); } else { alert("凭证无效!"); } }) .catch(error => { console.error("错误:", error); alert("发生错误,请重试。"); }); }); </script>
后端实现(Java)
使用javax.crypto包实现密码解密,代码如下:
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class LoginController { public String decrypt(String encryptedPassword, String secretKey) throws Exception { byte[] keyBytes = secretKey.getBytes("UTF-8"); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decodedPassword = Base64.getDecoder().decode(encryptedPassword); byte[] decryptedPasswordBytes = cipher.doFinal(decodedPassword); return new String(decryptedPasswordBytes, "UTF-8"); } }
内容的提问来源于stack exchange,提问作者Shah Harsh
相关产品推荐
相关产品推荐

