RSA前端加密后端解密避免出现明文密码
时间:2019-11-05
本文章向大家介绍RSA前端加密后端解密避免出现明文密码,主要包括RSA前端加密后端解密避免出现明文密码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
话不多说,直接开撸
public class RSAUtils { private static String PUB_KEY = "xxxxxx"; private static String PRIV_KEY ="xxxxxx"; public static Map<Integer, String> genKeyPair() { Map<Integer, String> keyMap = new HashMap<Integer, String>(); // 用于封装随机产生的公钥与私钥 try { // 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表示私钥 } catch (Exception e) { return null; } return keyMap; } /** * RSA公钥加密 * * @param str * 需要加密的字符串 * @param publicKey * 公钥 * @return 公钥加密后的内容 */ public static String encrypt(String str) { String outStr = null; try { // base64编码的公钥 byte[] decoded = Base64.decodeBase64(PUB_KEY); RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA") .generatePublic(new X509EncodedKeySpec(decoded)); // RSA加密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8"))); } catch (Exception e) { } return outStr; } /** * RSA私钥解密 * * @param str * 加密字符串 * @param privateKey * 私钥 * @return 私钥解密后的内容 */ public static String decrypt(String str) { String outStr = null; try { // 64位解码加密后的字符串 byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8")); // base64编码的私钥 byte[] decoded = Base64.decodeBase64(PRIV_KEY); RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA") .generatePrivate(new PKCS8EncodedKeySpec(decoded)); // RSA解密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, priKey); outStr = new String(cipher.doFinal(inputByte)); } catch (Exception e) { } return outStr; } }
这个类有一个生成公钥和私钥的方法,还有一个公钥加密和私钥解密的方法.我们将公钥放在前端用来加密,私钥放在后端用来解密.
前端需要引入jsencrypt.min.js
下载地址: http://travistidwell.com/jsencrypt/
加密方法:
就可以实现前端加密后端解密了
原文地址:https://www.cnblogs.com/wnhbx/p/11797906.html
- 51 Nod 1005 大数加法【Java大数乱搞,python大数乱搞】
- 51 Nod 1029 大数除法【Java大数乱搞】
- 51 Nod 1027 大数乘法【Java大数乱搞】
- SQL常用的基础语法
- 51 Nod 1028 大数乘法 V2【Java大数乱搞】
- Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题
- Windows下Cygwin可以使用哪些Linux命令
- Codeforces Round #426 (Div. 2)【A.枚举,B.思维,C,二分+数学】
- Cygwin,打造你的Windows下Linux环境
- “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】
- 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
- POJ 1655 Balancing Act【树的重心】
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据分析 常见异常及解决办法(一)
- Python数据分析实战(2)使用Pandas进行数据分析
- 【redis】redis内存管理、淘汰机制、内存优化
- 如何防止网站被扒的解决方法!
- 【python-面试题53-循环排序】寻找缺失的数
- 【python-leetcode42-区间合并】区间列表的交集
- 【python-leetcode202-快慢指针】快乐数
- vuejs之结合使用vue+element-ui搭建后台管理页面
- 【python-leetcode142-快慢指针】环形链表2
- 【python-leetcode141-快慢指针】环形链表
- python-快速排序
- 【python-leetcode75-双指针】颜色分类
- 【python-leetcode713-双指针】乘积小于k的子数组
- vuejs之构建简易音乐播放器
- vuejs小例子之天气查询