前言
注册时后端采用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(要加密的字符串)