0宽字符加密_「今日学习」VUE使用RSA加密技术
1
Vue端搭建
首先我们还是先安装必要的模块哈:
npm install jsencrypt --save
接下来我们需要在main.js的配置文件中配置上全局变量哈:
import JSEncrypt from 'jsencrypt';
接下来,我们在main.js创建加密函数:(注:这里的公钥仅仅是作为测试使用哈,正式使用的公钥应该是服务器发过来的哦)
Vue.prototype.$getRsaCode = function(str){
letpubKey=`MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpwvmYZzKNem5bF1/p8DGNBwAEJ7xicMM0VG0
TAK/vtJ/wFfIQ0s+n66GbtF9I8yRJBfv9+JE5VHNumsEipTRSkgadhtvMsh3G5oW5mNZZLNJAw8Z/E3CkBcPblc
HTwY0Qg50UKvJOg1izxdPxLKwV6+RLBSOYNn1BoZmT/i+ikQIDAQAB`;
// ES6 模板字符串 引用 rsa 公钥
let encryptStr = new JSEncrypt();
encryptStr.setPublicKey(pubKey); // 设置 加密公钥
let data = encryptStr.encrypt(str.toString()); // 进行加密
return data;
};
接下来,我们在main.js创建解密函数咯:(注意:这里的私钥也绝对不会发给客户端的哈,这里仅仅只是测试是否成功哦)
Vue.prototype.$decodeRsaCode = function(str){
letpriKey=`MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKnC+ZhnMo16bl
sXX+nwMY0HAAQnvGJwwzRUbRMAr++0n/AV8hDSz6froZu0X0jzJEkF+/34kTlUc26awSKlNFKSB
p2G28yyHcbmhbmY1lks0kDDxn8TcKQFw9uVwdPBjRCDnRQq8k6DWLPF0/EsrBXr5EsFI5g2fUGh
mZP+L6KRAgMBAAECgYB0tZbjMA+RNJqqBWfrbTajvixErwzUoLGTSHe0mMRcB9HtPSkuZ8BbsaN
paJgZjw9jJLoZ4Mn2oBi78ajWKL3O5QxGxBhFkWAqp1aLcH4I3mV5Nsz/xaQNJ5cUpNoiInHF6o
qe3q8Mb1OSg0DD8WUMWARpqUYrCOeDDFVA2/vAAQJBAPBDrg5rSpvRicTsnW5t3tbUo6fWf8Xfd
KvBKL/NvYW36vClCPbrrMvLZTQh+tbZ1lND8GmFqAwiU9/NHAhMSjcCQQC04TtgoHQIQ+XQ3S9l
/ZtD6MCVuGobLohgWaEKajqd5rxSguY9w9dc0x1ZONSYf1ooh/sTWF5C+iIwkdkionV3AkEAqPo
wlBuJYYVBK6puHphPPTBX2VbWjkfWOmWjTyJXxI/RQGYRo/ekk7/88WlkjW6veegyUUSbJ82Mx7
3tlThyiQJAQQv+XnFVSOOh8cqZEQRyoalCGJWJEt1ZDc0trKEnE0G217VbNzsGZ8tD8qINUgn6U
jkUgZB11YA+a1kHzPy/YQJBAJ6i9CSSBDWi8uAYlKecuZWQEza7l0aiuaPIi3j5UE5Y2U5zP369
JxwtaYpKs+6pVeD1W2cw5YGe1o2ZyZixDhU=`;let encryptStr = new JSEncrypt();encryptStr.setPrivateKey(priKey);return encryptStr.decrypt(str);}
接下来,我们创建测试卡:
initRSA:function () {
// 1、通过调用加密函数得到密文字符串 str
let str = this.$getRsaCode('123456');
// 2、调用解密函数开始解密
alert(this.$decodeRsaCode(str));
}
2
Java端搭建(SSM框架)
注意:这里需要导入一个jar文件哈,这个jar主要用来作为Base64解析使用,这里提供Maven的依赖:
commons-codec
commons-codec
1.14
接下来就是我们的Java代码咯:
public class RsaUtil {
private static Map keyMap = new HashMap(); //用于封装随机产生的公钥与私钥
public static void main(String[] args) throws Exception {
//生成公钥和私钥
genKeyPair();
//加密字符串
String message = "123456";
System.out.println("随机生成的公钥为:" + keyMap.get(0));
System.out.println("随机生成的私钥为:" + keyMap.get(1));
String messageEn = encrypt(message,keyMap.get(0));
System.out.println(message + "加密后的字符串为:" + messageEn);
String messageDe = decrypt(messageEn,keyMap.get(1));
System.out.println("还原后的字符串为:" + messageDe);
}
/**
* 随机生成密钥对
* @throws NoSuchAlgorithmException
*/
public static void genKeyPair() throws NoSuchAlgorithmException {
// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器,密钥大小为96-1024位
keyPairGen.initialize(1024,new SecureRandom());
// 生成一个密钥对,保存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到私钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 得到公钥
String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
// 得到私钥字符串
String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
// 将公钥和私钥保存到Map
keyMap.put(0,publicKeyString); //0表示公钥
keyMap.put(1,privateKeyString); //1表示私钥
}
/**
* RSA公钥加密
* @param str 加密字符串
* @param publicKey 公钥
* @return 密文
* @throws Exception 加密过程中的异常信息
*/
public static String encrypt( String str, String publicKey ) 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 加密字符串
* @param privateKey 私钥
* @return 明文
* @throws Exception 解密过程中的异常信息
*/
public static String decrypt(String str, String privateKey) 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;}}
0宽字符加密_「今日学习」VUE使用RSA加密技术相关推荐
- vue rsa加密 php解密,【今日学习】VUE使用RSA加密技术
原标题:[今日学习]VUE使用RSA加密技术 1 Vue端搭建 首先我们还是先安装必要的模块哈: npm install jsencrypt --save 接下来我们需要在main.js的配置文件中配 ...
- mysql创建全外连接的视图_「MySql学习」Mysql学习系列之常用数据库查询语句
一.简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的表或视图.以及搜索条件等.10.5pt;font-family:"A ...
- 5g上行速率怎么提升_「5G学习」怎么样粗略计算5G的理论峰值速率
A.在计算理论峰值速率之前,需要确定以下参数的数值. (1)资源块PRB数目 例如图一: 图一 资源块PRB数目 系统带宽100M,子载波间隔30KHz的5G系统,最多传输的PRB数目为273. (2 ...
- python 深度学习源码_「深度学习」用TensorFlow实现人脸识别(附源码,快速get技能)...
本文将会带你使用python码一个卷积神经网络模型,实现人脸识别,操作难度比较低,动手跟着做吧,让你的电脑认出你那帅气的脸. 由于代码篇幅较长,而且最重要的缩进都没了,建议直接打开源码或者点击分享-& ...
- 0宽字符加密_艺术鬼才!Unicode 字符还能这么玩?
上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞. 还没来得及了解咋回事来着,这个直升飞机就 到的微博热搜. 后面越来越多人开来他们的直升飞机,盘旋在朋友圈上方.于是很 ...
- AI 大数据在数据隐私保护下如何普惠共享?CCF TF「联邦学习」研讨会给出了答案
雷锋网 AI 科技评论按:3 月 24 日,由 CCF 主办.微众银行和深圳大学微众金融科技研究院协办的第 14 期中国计算机学会技术前线研讨会于深圳大学科技楼二号报告厅圆满召开,研讨会的主题为「联邦 ...
- html js不触发_「万字整理 」这里有一份Node.js入门指南和实践,请注意查收 ??
前言 什么是 Node.js 呢 ? JS 是脚本语言,脚本语言都需要一个解析器才能运行.对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色.而对于需要独立运行的 JS,NodeJS 就是一 ...
- 不让「数据孤岛」成为 AI 发展的绊脚石,「联邦学习」将成突破口?...
雷锋网 AI 科技评论按:人工智能经过漫长发展,近些年成功突破技术与算力上的限制,因此得以在新世纪发挥着举足轻重的作用.不过随之而来是一系列的新问题--最典型的比如「数据孤岛」问题.该问题一日不被解决 ...
- 今日头条php面试经验,「今日头条」前端面试题和思路解析
一篇文章和一道面试题 作者用一道2017年「今日头条」的前端面试题为引子,分步讲解了最终结果的执行原因.其中涉及到了不少概念,比如异步的执行顺序,宏任务,微任务等等,同时作者限定了执行范围,以浏览器的 ...
最新文章
- [Step By Step]SAP HANA创建层次结构的属性视图(Hierarchy Attribute View)
- 利用windows优化大师软件卸载一手和清理一招
- pycharm python 模板配置_pycharm设置python脚本模板
- 北京高院宣判:微信商标案终审驳回上诉 维持原判
- 引用类型和值类型学习笔记
- DAY18 面向对象三大特性之继承
- IDEA配置TeaVM插件
- 方便!Python 操作 Excel 神器 xlsxwriter 初识!
- 文字转语音播报,兼容多种浏览器
- jwt token注销_JWT 管理用户登录时,都需要把 token 存数据库里,判断用户登出时删除吗?...
- IP地址中的网络地址和主机地址分别是什么意思?
- 小米5x android auto,小米 5s Plus重生——伪装Pixel XL
- 计算机组装手机app,智能手机安装软件的
- 数据挖掘技术的算法与应用
- linux低级挖矿病毒的查找定位
- 远程连接阿里云服务器出现“远程桌面,身份验证错误:要求的函数不受支持“解决办法
- 20190323-Excel使用手册
- 目标检测:CenterNet论文解读及代码详解
- echarts制作图表同时有3d柱状图与折线图
- [模型学习]seq2seq
热门文章
- 鸿蒙os2.0基于安卓,外媒实测总结,目前华为鸿蒙OS 2.0依旧是基于安卓框架
- Python给多人发送邮件
- 基于深度学习的人脸识别AI技术谜与思(十四)--脸型识别
- oracle如何设置归档策略,oracle数据库rman归档设置和管理
- ffmpeg h264解码器分析sps(二)
- 使用Win32DiskImager写入U盘容量变小,提示格式化。恢复U盘原本容量方法
- 捷信消费金融十年:巨轮转向,海阔天空
- PHP中RabbitMQ之amqp扩展实现(四)
- JavaScript实现N个视频的切换
- Python快速上手系列--类--详解篇