首先这是两套方案, 前面针对于数据传输过程中针对参数的加密, 防止窃取参数包 , 后面的是单纯的单纯的对称加解密
<dependency>
<groupId>cn.hutoolgroupId>
<artifactId>hutool-allartifactId>
<version>5.7.21version>
dependency>
#安装依赖
npm install jsencrypt
#公钥加密密码
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
#公钥串
const publicKey = ''
// 加密
export function encrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
return encryptor.encrypt(txt) // 对数据进行加密
}
// 1 引入js文件 , jsencrypt.min.js这个从网上搜索一下就行了
<script src="http://code.jquery.com/jquery-1.8.3.min.js">script>
<script src="jsencrypt.min.js">script>
// 2 加密字符串
var encryptor = new JSEncrypt()
encryptor.setPublicKey($('#pubkey').val()) // 设置公钥
var encrypted= encryptor.encrypt($('#input').val())
// # pubkey 该串同上, 下面会附有获取密钥对的方法
// # input 需要加密的 字符串
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
// privateKey 前端对应公钥的 私钥
RSA rsa = new RSA(privateKey, null);
//这里就得到了明文密码
String decrypt = rsa.decryptStr({inputValue}, KeyType.PrivateKey);
在线生成非对称加密公钥私钥对、在线生成公私钥对、RSA Key pair create、生成RSA密钥对--查错网http://web.chacuo.net/netrsakeypair在线生成公钥私钥对,RSA公私钥生成-ME2在线工具在线生成公钥私钥对,RSA公私钥生成,Generate RSA key pair,可用于对数据进行非对称加密、解密,比对称加密拥有更高的安全性http://www.metools.info/code/c80.html
我们项目因为前端使用的是 VUE , 前端一直加密失败, 加密就是个空, 后来我改了下公钥, 让他生成密钥位数 改为了512bit ,后来前端就能成功生成了, 这里 js不受位数影响.
看下运行结果吧
前端利用公钥加密密文
后端使用私钥对解密结果
该场景主要适用于各种参数需要加密保存到数据库中, 比如用户登录密码以及其他的敏感数据
步骤很简单
//加解密
String password="admin";
// 自定义随便一个秘钥key
//byte[] bytes = Arrays.copyOf(StrUtil.bytes("i am a key", CharsetUtil.UTF_8), 32);
// 使用工具生成随机key
byte[] bytes2 = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, bytes2);
String passwordDB = aes.encryptHex(password, CharsetUtil.CHARSET_UTF_8);
log.info("对称加密为:{}",passwordDB);//efd00fe0b989eac5d1392a3e3e7747ab
String passwordR = aes.decryptStr(passwordDB);
log.info("对称解密为:{}",passwordR);
运行结果就不贴图了, 直接在main方法中跑一下就行, jar包都是 hutools中的.
特别鸣谢:
密码的前端加密与后端解密_bassfire的博客-CSDN博客
Java使用Hutool实现AES、DES加密解密_weixin_34026484的博客-CSDN博客
简单提供一段js代码, 直接保存.html文件即可, 喜欢CV的同仁们可以自己快速测试 里面的js文件自行百度
JavaScript RSA Encryption