Springboot+vue架构用户密码加密方案

前言

注册时后端采用MD5加密密码数据后保存;登录时前端采用JSEncrypt加密密码后传输给后端,后端采用Java RSA解密密码,并用MD5加密解密的密码与数据库存储的密码比对



提示:以下是本篇文章正文内容,下面案例可供参考

一、Vue RSA加密

1.安装jsencrypt

npm i jsencrypt -S

2.引入jsencrypt

import JSEncrypt from 'jsencrypt/bin/jsencrypt';

2.登录接口调用

login() {
	let that = this;
	let encryptor = new JSEncrypt();
	let publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoT4aq4EMDE/UwF4xaEbyTY/cShim+Elx2ppMhAO09CHTV9rWIbtoedXWaeMLSlHfgxF5O/HYfrvsRW6/ojVUtEM+YwBu1LZlKB8S9lkJX9SfusYMMrh1JCJ3X8bCiFvHUnFRhtxtgUZ/tki9AkwbqgFQddSqeHPgcptU0ENtRmwIDAQAB';
	encryptor.setPublicKey(publicKey);
	that.$axios.post(that.$api.login.login, {
	    userCode: encryptor.encrypt(that.userCode),
	    password: encryptor.encrypt(that.password)
	}).then(function(response) {
	    let result = response.data;
	    if (result.code === 0) {
	        let data = result.data;
	        let name = data.name;
	        let token = result.token;
	        let userId = data.userId;
	        let orgId = data.orgId;
	        let orgName =data.orgName;
	        let userType =data.userType;
	        let userTypeName=data.userTypeName;
	        let userState =data.userState;
	        //处理用户信息
	        that.handleUserInfo(userId, name, token,orgId,orgName,userType,userTypeName,userState);
	        that.$router.push("/");
	    } else {
	        that.$message(result.msg);
	    }
	}).catch(function(error) {
	    that.$message(error.message);
	});
	},

二、Java RSA加密、解密

package com.example.demo.common.util;

import org.apache.tomcat.util.codec.binary.Base64;

import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

/**
 * @ClassName RSAUtil
 * @Description 使用Cipher类实现RSA加密解密
 * @Author 
 * @Date 2021/6/4 10:42
 * @Version 1.0
 **/
public class RSAUtil {

    //在网站生成:http://web.chacuo.net/netrsakeypair
    private static final String privateKey="MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKhPhqrgQwMT9TAXjFoRvJNj9xKGKb4SXHamkyEA7T0IdNX2tYhu2h51dZp4wtKUd+DEXk78dh+u+xFbr+iNVS0Qz5jAG7UtmUoHxL2WQlf1J+6xgwyuHUkIndfxsKIW8dScVGG3G2BRn+2SL0CTBuqAVB11Kp4c+Bym1TQQ21GbAgMBAAECgYBDvk6LtFwEfyHuy2uYTQ9Dm7a0Y/+lGyrQLteFLyRNrnuoKvaCBWwRWmGNXRG9RDjD5QW4cPDya7FuGSNCTLB9HevKC7HT60VJfvyROwM5SXmdde2T+uzHZZLLEnwcIg3m4aC+rKshV64XemtadZQ4/mJsXCiXy+M8/IvviaJisQJBANKe4FBUA/TcqwVLYRkbT6keVDoCgc+Hin3VIGWAxjE76eMf4Hq8MV7m7FKwj4ChLXTU/qSShyeKLZY0qob8UJ8CQQDMkvmLDW/Ck2L4tc1h1okna9kqeQMhMW4BknWeUu1TdH7no0GJm0bpaUuzRKWcYJbXBGv72Zlo0AEyMpj5STGFAkEAz8rhAT8yPBStQWbx38Q7Hl2GuUiZ6zYM40IuWRXn8tDqWiKr5Erg5oEq7BW3Li9V2mr84z6QyuifOw6wosYxfwJBAKjeAeOIueJx61bGK71BbIIAAomOzsiNlvLxROnmJkWnekIXfzfp10VBR925IsPM73aaDdEdNAdS/EnFfoT4qEkCQQCAd7IKiLP8AyTHv+MsvJ3F+OQG6sFuXz+KUz+VU1OPvpUMeXvlILO0svI8JJxpnH+nhpK84j4VlCgY2MDw9cq3";
    private static final String publicKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoT4aq4EMDE/UwF4xaEbyTY/cShim+Elx2ppMhAO09CHTV9rWIbtoedXWaeMLSlHfgxF5O/HYfrvsRW6/ojVUtEM+YwBu1LZlKB8S9lkJX9SfusYMMrh1JCJ3X8bCiFvHUnFRhtxtgUZ/tki9AkwbqgFQddSqeHPgcptU0ENtRmwIDAQAB";

    /**
     * RSA公钥加密
     * @param str 加密字符串
     * @return 密文
     * @throws Exception 加密过程中的异常信息
     */
    public static String encrypt( String str) throws Exception{
        //base64编码的公钥
        byte[] decoded = Base64.decodeBase64(publicKey);
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
        //RSA加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
        return outStr;
    }

    /**
     * RSA私钥解密
     * @param str 加密字符串
     * @return 铭文
     * @throws Exception 解密过程中的异常信息
     */
    public static String decrypt(String str) throws Exception{
        //64位解码加密后的字符串
        byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
        //base64编码的私钥
        byte[] decoded = Base64.decodeBase64(privateKey);
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
        //RSA解密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        String outStr = new String(cipher.doFinal(inputByte));
        return outStr;
    }

}

二、Springboot的md5加密

DigestUtils.md5Hex(要加密的字符串)
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springbootvue是目前非常流行的开发框架,结合起来可以高效地开发一个现代化的旅游系统。这个系统可以包括用户注册登录、浏览旅行目的地、预订旅行产品、支付订单等功能。接下来我们将详细介绍基于springbootvue的旅游系统文档。 首先,我们需要在文档中详细介绍系统的整体架构和各个模块的功能。例如,前端使用vue框架实现页面的展示和交互,后端使用springboot框架来提供RESTful API接口,实现前后端分离的开发方式。在文档中需要详细描述每个模块的功能和实现方式,以及各个模块之间的交互关系。 其次,我们需要在文档中详细描述系统的数据库设计和数据流程。包括数据库表的设计、表之间的关联关系、数据的存储和查询方式等。另外,通过详细的数据流程图和时序图来说明数据在系统中的流动和处理过程。 此外,我们还需要在文档中详细描述系统的安全机制和性能优化。安全机制包括用户权限管理、数据加密和防止恶意攻击等方面。性能优化包括前端页面加载速度、后端接口响应时间、并发请求的处理能力等方面。 最后,我们需要在文档中详细介绍系统的部署和运维方式。包括系统的部署环境、部署步骤、系统的监控和日志记录等方面。另外,可以考虑加入自动化部署和持续集成的方案,提高系统的稳定性和可维护性。 综上所述,基于springbootvue的旅游系统文档需要详细描述系统的架构、数据库设计、安全机制、性能优化和部署运维方式,以便于开发人员和运维人员能够清晰地理解系统的设计和实现方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值