成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue前端RSA加密java后端解密的方法實現

瀏覽:170日期:2022-06-01 17:02:33
目錄
  • 一、前言
  • 二、前端代碼與用法
  • 三、后端代碼與用法

一、前言

最近安全測試的總是測出安全漏洞來,讓開發改。

想了想干脆把請求參數都加密下,前端加密后端解密,這樣總差不多了。

看了下AES加密,是對稱的,前后端用這個不太行。

于是想到用RSA加密,是非對稱的,可以前端加密后端解密。

二、前端代碼與用法

1.前端是vue項目,使用時,需要先執行:

npm i jsencrypt

把這個依賴下載到node_modules里面。

2.可以增加一個工具類文件:項目名/src/utils/commonUtil.js,內容如下:

import JSEncrypt from "jsencrypt";

export default {
? encodeRSA(word, keyStr) {
? ? //這個是公鑰,有入參時用入參,沒有入參用默認公鑰
? ? keyStr = keyStr ? keyStr : "MIGxxxxxxxxxxxxxxxxxxxxxxxxxx";
? ? //創建對象
? ? const jsRsa = new JSEncrypt();
? ? //設置公鑰
? ? jsRsa.setPublicKey(keyStr);
? ? //返回加密后結果
? ? return jsRsa.encrypt(word);
? }

}

3.然后,需要使用的地方,就可以這樣用:

//引入第2步的工具類
import commonUtil from "@utils/commonUtil"

//引入一個發請求的方法,這個也需要npm i
import axios from "axios"

//一個發請求用的方法
export function myget(userId) {

? return axios.get(`/xxx/user`, {
? ? headers: {
? ? ? //先把參數rsa加密下,再用urlEncoder轉下碼,然后放header里傳給后臺
? ? ? userId: encodeURIComponent(commonUtil.encodeRSA(userId, null)),
? ? },
? }).then(res => {
? ? return res.data
? })
}

這樣,就把加密參數放入header里的userId里了,后臺可以取出后解密。

三、后端代碼與用法

1.可以先寫個工具類,如下:(RSA公鑰和私鑰可以用這個工具類生成,然后自己記錄后使用)

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.Security;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Map;
import java.util.HashMap;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.KeyPair;

public class RSAUtil {

? ? //公鑰,可以寫前端
? ? public static String public_key="MIGxxxxxx";

? ? //私鑰,只能放后端
? ? public static String private_key="MIICxxxxxxxx";


? ? public static void main(String[] args) {
? ? ? ? //解密數據
? ? ? ? try {
? ? ? ? ? ? //生成公鑰和私鑰
? ? ? ? ? ? genKeyPair();
? ? ? ? ? ? String publicKey = keyMap.get(0);
? ? ? ? ? ? //打印出來自己記錄下
? ? ? ? ? ? System.out.println("公鑰:" + publicKey);
? ? ? ? ? ? String privateKey = keyMap.get(1);
? ? ? ? ? ? //打印出來自己記錄下
? ? ? ? ? ? System.out.println("私鑰:" + privateKey);

? ? ? ? ? ? //獲取到后,可以放這里,測試下能不能正確加解密
? ? ? ? ? ? publicKey = public_key;
? ? ? ? ? ? privateKey = private_key;

? ? ? ? ? ? String orgData = "test";
? ? ? ? ? ? System.out.println("原數據:" + orgData);
? ? ? ? ? ??
? ? ? ? ? ? //加密
? ? ? ? ? ? String encryptStr =encrypt(orgData,publicKey);
? ? ? ? ? ? System.out.println("加密結果:" + encryptStr);

? ? ? ? ? ? //解密
? ? ? ? ? ? String decryptStr = decrypt(encryptStr,privateKey);
? ? ? ? ? ? System.out.println("解密結果:" + decryptStr);

? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

? ? /**
? ? ?* RSA公鑰加密
? ? ?*
? ? ?* @param str ? ? ? 加密字符串
? ? ?* @param publicKey 公鑰
? ? ?* @return 密文
? ? ?* @throws Exception 加密過程中的異常信息
? ? ?*/
? ? public static String encrypt(String str,String publicKey) throws Exception {
? ? ? ? //base64編碼的公鑰
? ? ? ? byte[] decoded = decryptBASE64(publicKey);
? ? ? ? Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
? ? ? ? RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
? ? ? ? //RSA加密
? ? ? ? Cipher cipher = Cipher.getInstance("RSA");
? ? ? ? cipher.init(Cipher.ENCRYPT_MODE, pubKey);
? ? ? ? String outStr = encryptBASE64(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 = decryptBASE64(str);
? ? ? ? //base64編碼的私鑰
? ? ? ? byte[] decoded = decryptBASE64(privateKey);
? ? ? ? Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
? ? ? ? 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;
? ? }

? ? //編碼返回字符串
? ? public static String encryptBASE64(byte[] key) throws Exception {
? ? ? ? return (new BASE64Encoder()).encodeBuffer(key);
? ? }

? ? //解碼返回byte
? ? public static byte[] decryptBASE64(String key) throws Exception {
? ? ? ? return (new BASE64Decoder()).decodeBuffer(key);
? ? }

? ? /**
? ? ?* 密鑰長度 于原文長度對應 以及越長速度越慢
? ? ?*/
? ? private final static int KEY_SIZE = 1024;
? ? /**
? ? ?* 用于封裝隨機產生的公鑰與私鑰
? ? ?*/
? ? private static Map<Integer, String> keyMap = new HashMap<Integer, String>();

? ? /**
? ? ?* 隨機生成密鑰對
? ? ?* @throws Exception
? ? ?*/
? ? public static void genKeyPair() throws Exception {
? ? ? ? // KeyPairGenerator類用于生成公鑰和私鑰對,基于RSA算法生成對象
? ? ? ? KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
? ? ? ? // 初始化密鑰對生成器
? ? ? ? keyPairGen.initialize(KEY_SIZE, new SecureRandom());
? ? ? ? // 生成一個密鑰對,保存在keyPair中
? ? ? ? KeyPair keyPair = keyPairGen.generateKeyPair();
? ? ? ? // 得到私鑰
? ? ? ? RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
? ? ? ? // 得到公鑰
? ? ? ? RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
? ? ? ? String publicKeyString = encryptBASE64(publicKey.getEncoded());
? ? ? ? // 得到私鑰字符串
? ? ? ? String privateKeyString = encryptBASE64(privateKey.getEncoded());
? ? ? ? // 將公鑰和私鑰保存到Map
? ? ? ? //0表示公鑰
? ? ? ? keyMap.put(0, publicKeyString);
? ? ? ? //1表示私鑰
? ? ? ? keyMap.put(1, privateKeyString);
? ? }
}

2.使用時,把公鑰內容放入前端js,私鑰內容就放后端代碼里,就可以和前端聯調測試了。樣例如下:

? ? //測試接口
? ? @GetMapping("/xxx/user")
? ? public String myget(HttpServletRequest request) {

? ? ? ? //先用非對稱算法RSA解密一下
? ? ? ? try {
? ? ? ? ? ? //從header里獲取到參數
? ? ? ? ? ? String userId = request.getHeader("userId");
? ? ? ? ? ? log.debug("收到userId,內容為:"+userId);
? ? ? ? ? //這里解密,注意先用URLDecode處理了下,如果前端沒有用的話,這里也不用處理
? ? ? ? ? ? userId = RSAUtil.decrypt(URLDecoder.decode(userId,"UTF-8"), RSAUtil.private_key);
? ? ? ? ? ? log.debug("RSA解密成功,userId為"+userId);
? ? ? ? ? ??
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? log.error("RSA解密失敗",e);
? ? ? ? ? ? //如果解密失敗,就返回null
? ? ? ? ? ? return null;
? ? ? ? }

? ? ? ? return "成功";

? ? }

到此這篇關于vue前端RSA加密java后端解密的方法實現的文章就介紹到這了,更多相關vue RSA加密java后端解密內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: JavaScript
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日日噜噜夜夜狠狠视频欧美人| 一本久久精品一区二区| 亚洲精品免费在线观看| 亚洲综合色自拍一区| 精品一区二区三区视频在线观看| 国产精品中文有码| 91蝌蚪porny| 在线午夜精品| 5858s免费视频成人| 2014亚洲片线观看视频免费| 国产精品免费久久久久| 亚洲乱码国产乱码精品精小说| 99国内精品久久| 亚洲三级国产| 欧美三级韩国三级日本三斤| 精品999在线播放| 亚洲国产色一区| 国产精品一区二区在线播放 | jvid福利写真一区二区三区| 影音先锋久久| 欧美在线观看一二区| 欧美国产精品久久| 久久精品国产第一区二区三区| eeuss国产一区二区三区| 91麻豆精品国产91久久久| 六月婷婷色综合| 91福利社在线观看| 欧美激情一区二区三区蜜桃视频| 成人av在线电影| 久久久一二三| 久久噜噜亚洲综合| 看片的网站亚洲| 欧美日韩国产成人在线免费| ...中文天堂在线一区| 精品综合免费视频观看| 91成人在线精品| 麻豆免费看一区二区三区| 欧美99久久| 在线观看一区二区视频| 美女国产一区二区| 69久久夜色精品国产69蝌蚪网| 成人一级片在线观看| 国产精品美女久久久浪潮软件| 欧美成人性福生活免费看| 五月天亚洲精品| 国产精品sss| 6080午夜不卡| 成人av网址在线观看| 国产欧美精品日韩区二区麻豆天美| 麻豆freexxxx性91精品| 欧美精品一级二级三级| 亚洲高清不卡在线观看| 午夜亚洲伦理| 国产日韩欧美精品综合| 国产一区日韩欧美| 日韩美女一区二区三区| 日韩国产欧美三级| 精品成人在线| 久久免费电影网| 欧美精品国产| 精品理论电影在线观看| 色综合一区二区三区| 欧美日韩高清一区| 福利视频网站一区二区三区| 91福利资源站| 国产一区不卡精品| 日本韩国精品一区二区在线观看| 日本不卡视频一二三区| 国产亚洲第一区| 日本伊人色综合网| 91麻豆精品国产综合久久久久久| av不卡一区二区三区| 国产精品丝袜在线| 久久久久久一区二区| 国产一二精品视频| 国产欧美日韩另类一区| 国产欧美三级| 国产一区二区三区在线观看精品| 久久亚洲综合色一区二区三区| 国语精品一区| 秋霞电影一区二区| 久久看人人爽人人| 久久亚洲色图| 成人免费视频免费观看| 中文字幕一区二区三区在线观看 | 久久精品视频在线免费观看| voyeur盗摄精品| 亚洲激情校园春色| 日韩欧美视频在线 | 日韩午夜在线观看| 国产麻豆9l精品三级站| 亚洲国产高清aⅴ视频| 一本大道久久a久久精二百| 丁香婷婷综合色啪| 亚洲免费观看高清完整版在线| 黑人一区二区三区四区五区| 日韩中文字幕91| 日韩欧美精品三级| 国产精品视频免费一区| 国产精品综合视频| 亚洲婷婷综合久久一本伊一区| 一区在线播放| 另类小说一区二区三区| 国产欧美视频在线观看| 色婷婷av一区| 欧美喷水视频| 精品一区二区国语对白| 国产欧美日韩在线观看| 欧洲亚洲国产日韩| 海角社区69精品视频| 国产真实乱对白精彩久久| 88在线观看91蜜桃国自产| 亚洲国产精选| 成人一道本在线| 亚洲国产欧美一区二区三区丁香婷| 欧美tk—视频vk| 久久激情婷婷| 蜜桃视频在线观看一区| 中文字幕av免费专区久久| 欧美三级中文字| 国产亚洲毛片在线| 99久久综合99久久综合网站| 美女视频黄 久久| 亚洲欧美在线观看| 精品国产3级a| 欧美色图天堂网| 国产成人在线看| 久久久一区二区| 欧美影院午夜播放| 亚洲激情成人| 91性感美女视频| 国产在线精品一区在线观看麻豆| 亚洲在线一区二区三区| 久久夜色精品国产噜噜av| 欧美视频在线观看一区二区| 一本色道久久综合一区| 91免费看`日韩一区二区| 精品一区二区三区视频| 亚洲成人黄色小说| 欧美电影在线免费观看| 亚洲一区欧美激情| 韩国欧美一区二区| 亚洲一区电影777| 国产精品日韩精品欧美在线 | 亚洲美女电影在线| 国产人妖乱国产精品人妖| 欧美一区二区国产| 国产精品二区在线观看| 成人精品在线视频观看| 久久99九九99精品| 日韩电影一二三区| 亚洲午夜av在线| **性色生活片久久毛片| 欧美激情一区三区| 26uuu亚洲综合色| 91精品国产91久久久久久一区二区| 久久午夜电影| 亚洲欧美日产图| 亚洲久久在线| 国产精品一区二区三区网站| 日韩不卡在线观看日韩不卡视频| 亚洲码国产岛国毛片在线| 国产无一区二区| 久久理论电影网| ww久久中文字幕| 日韩欧美黄色影院| 欧美一区二区精品久久911| 欧美电影影音先锋| 777亚洲妇女| 欧美一区二区精品| 欧美大黄免费观看| 日韩一级在线观看| 日韩三级中文字幕| 8v天堂国产在线一区二区| 欧美日高清视频| 337p亚洲精品色噜噜噜| 91精品久久久久久久91蜜桃| 5566中文字幕一区二区电影| 欧美一区二区三区啪啪| 日韩一级免费观看| www国产成人| 久久精品无码一区二区三区| 欧美国产日韩亚洲一区| 国产日韩欧美在线一区| 日本一区二区三区电影| 亚洲国产高清在线观看视频| 欧美国产丝袜视频| 亚洲欧洲国产日韩| 亚洲男同性视频| 亚洲无线码一区二区三区| 午夜婷婷国产麻豆精品| 日韩国产一区二| 国产一区在线观看视频| 国产精品亚洲第一区在线暖暖韩国 | 亚洲日本国产| 亚洲专区免费| 欧美怡红院视频| 日韩亚洲欧美综合| 久久美女艺术照精彩视频福利播放 | 欧美日韩在线播放一区二区|