前后端登录的密码加密和解密

在一个典型的前后端应用中,前端对密码进行加密后传给后端,后端再进行解密或验证。这通常涉及前端加密、后端解密或验证的相互配合。下面是一个基本的流程:
前端加密

前端可以使用各种加密库或算法对密码进行加密。常见的是使用哈希函数(比如SHA-256)或者加密算法(比如AES)。

例如,使用 JavaScript 进行密码加密:


// 例如,使用 CryptoJS 进行密码加密(这里以SHA-256为例)
const password = '用户密码'; // 从用户输入获取密码

const encryptedPassword = CryptoJS.SHA256(password).toString();
// 将加密后的密码传输给后端
// 通常可以通过axios发送HTTP请求
axios.post('/login', { password: encryptedPassword })
  .then(response => {
    // 处理后端返回的响应
  })
  .catch(error => {
    // 处理错误
  });

后端验证
后端收到加密后的密码后,不进行解密,而是对密码进行相同的加密(使用相同的哈希函数或加密算法和密钥),然后与数据库中存储的加密后密码进行比对。
例如,使用 Spring Boot 进行密码验证


// 假设接收前端传来的加密密码,这里以SHA-256为例
@PostMapping("/login")
public ResponseEntity<String> login(@RequestBody Map<String, String>; request) {
    String receivedEncryptedPassword = request.get("password");

    // 对接收到的密码再进行加密(使用相同的算法和密钥)
    String serverSalt = "服务器存储的盐"; // 这是加密过程中的盐值
    String encryptedPassword = encryptPassword(receivedEncryptedPassword, serverSalt);

    // 与数据库中存储的加密密码比对
    String storedEncryptedPassword = "数据库中存储的加密密码"; // 从数据库中获取
    if (encryptedPassword.equals(storedEncryptedPassword)) {
        // 密码匹配,登录成功
        return ResponseEntity.ok("登录成功");
    } else {
        // 密码不匹配,登录失败
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("登录失败");
    }
}

// 这个方法用于对密码进行加密(这里仅是示例,请根据实际使用的算法进行适当的调整)
private String encryptPassword(String password, String salt) {
    // 这里可使用你选择的加密算法和盐值进行密码加密
    // 例如,SHA-256 + 盐值
    String encrypted = hashFunction(password + salt); // hashFunction代表哈希函数,需要根据实际使用的算法进行替换
    return encrypted;
}

salt 盐,每一个用户在注册的时候随机生成一个盐,在做用户明文登录,转换成二次加密,然后根据用户的盐在进行一次加密保存到数据库,这样即使数据库被袭击,用需要大量时间来破解密码

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝胖子不是胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值