前后端密码RSA密文传输

1、后端引入hutool包,主要用于使用RSA加密工具

<dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.8.4</version>
</dependency>

2、后端随机生成公钥与私钥,本处为解决每次生成新的秘钥带来性能的损耗,因此采用单例模式思想,回传公钥至前端。

private RSA rsa;

@GetMapping("/login")
    String login(Model model) {
        if (this.rsa == null) {
            this.rsa = new RSA();
        }
        model.addAttribute("publicKey", this.rsa.getPublicKeyBase64());
        return "loginforasset";
    }

3、前端接收公钥,采用input框的方式接收,否则该公钥不会识别为字符串

<input id="publicKey" name="publicKey" th:value="${publicKey}" hidden>

4、引入js加密工具文件,直接复制如下链接,将其获取的内容复制粘贴成 jsencrypt.js 文件,并引入系统使用。

https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.2.1/jsencrypt.js

//引入js
<script src="/js/jsencrypt.js"></script> 

5、ajax回传密码前执行加密

function login() {
        var encrypt = new JSEncrypt();  //初始化加密
        encrypt.setPublicKey($("#publicKey").val());  // 设置公钥
        $.ajax({
            type: "POST",
            url: ctx + "login",
            async: false,
            dataType: 'json',
            data: {
                username: $("#username").val(),
                password: encrypt.encrypt($("#password").val()),  //加密步骤
                validateCode: $("#validateCode").val()
            },
            success: function (r) {
                if (r.code == 0) {
                    var index = layer.load(1, {
                        shade: [0.1, '#fff'] //0.1透明度的白色背景
                    });
                    parent.location.href = '/index';
                } else {
                    changeImg();
                    layer.msg(r.msg);
                }
            },
        });
    }

6、后端解密

    @Log("登录")
    @PostMapping("/login")
    @ResponseBody
    R ajaxLogin(String username, String password, String validateCode, HttpServletRequest request) {
        password = this.rsa.decryptStr(password, KeyType.PrivateKey);
       // 后续就是密码验证等工作
    }

7、到此处就实现了前后端密码的RSA加密传输的功能。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值