国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了vue前端RSA加密java后端解密的方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言

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

想了想干脆把請(qǐng)求參數(shù)都加密下,前端加密后端解密,這樣總差不多了。

看了下AES加密,是對(duì)稱的,前后端用這個(gè)不太行。

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

二、前端代碼與用法

1.前端是vue項(xiàng)目,使用時(shí),需要先執(zhí)行:

npm i jsencrypt

把這個(gè)依賴下載到node_modules里面。

2.可以增加一個(gè)工具類文件:項(xiàng)目名/src/utils/commonUtil.js,內(nèi)容如下:

import JSEncrypt from "jsencrypt";

export default {
  encodeRSA(word, keyStr) {
    //這個(gè)是公鑰,有入?yún)r(shí)用入?yún)ⅲ瑳]有入?yún)⒂媚J(rèn)公鑰
    keyStr = keyStr ? keyStr : 'MIGxxxxxxxxxxxxxxxxxxxxxxxxxx';
    //創(chuàng)建對(duì)象
    const jsRsa = new JSEncrypt();
    //設(shè)置公鑰
    jsRsa.setPublicKey(keyStr);
    //返回加密后結(jié)果
    return jsRsa.encrypt(word);
  }

}

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

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

//引入一個(gè)發(fā)請(qǐng)求的方法,這個(gè)也需要npm i
import axios from 'axios'

//一個(gè)發(fā)請(qǐng)求用的方法
export function myget(userId) {

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


這樣,就把加密參數(shù)放入header里的userId里了,后臺(tái)可以取出后解密。

三、后端代碼與用法

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


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) {
        //解密數(shù)據(jù)
        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("原數(shù)據(jù):" + orgData);
            
            //加密
            String encryptStr =encrypt(orgData,publicKey);
            System.out.println("加密結(jié)果:" + encryptStr);

            //解密
            String decryptStr = decrypt(encryptStr,privateKey);
            System.out.println("解密結(jié)果:" + 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);
    }

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

    /**
     * 隨機(jī)生成密鑰對(duì)
     * @throws Exception
     */
    public static void genKeyPair() throws Exception {
        // KeyPairGenerator類用于生成公鑰和私鑰對(duì),基于RSA算法生成對(duì)象
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        // 初始化密鑰對(duì)生成器
        keyPairGen.initialize(KEY_SIZE, new SecureRandom());
        // 生成一個(gè)密鑰對(duì),保存在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.使用時(shí),把公鑰內(nèi)容放入前端js,私鑰內(nèi)容就放后端代碼里,就可以和前端聯(lián)調(diào)測試了。樣例如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-419858.html

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

        //先用非對(duì)稱算法RSA解密一下
        try {
            //從header里獲取到參數(shù)
            String userId = request.getHeader("userId");
            log.debug("收到userId,內(nèi)容為:"+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 "成功";

    }

到了這里,關(guān)于vue前端RSA加密java后端解密的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot+Vue 后端輸出加密,前端請(qǐng)求統(tǒng)一解密

    針對(duì)客戶對(duì)數(shù)據(jù)交互過程中的加密要求,防止直接的數(shù)據(jù)爬取,對(duì)前后端數(shù)據(jù)請(qǐng)求時(shí)的返回?cái)?shù)據(jù)進(jìn)行數(shù)據(jù)的加密。實(shí)用性嘛,也就那樣了,代碼可直接適配Ruoyi SpringBoot+vue項(xiàng)目,具體加密方式和處理僅供參考! 前端 request.js des.js 后端java

    2024年02月09日
    瀏覽(29)
  • 使用CryptoJS實(shí)現(xiàn)Vue前端加密,Java后臺(tái)解密的步驟和方法

    1、crypto.js簡介 ??CryptoJS 是一個(gè) JavaScript 庫,提供了一系列密碼學(xué)函數(shù)和工具,用于加密、解密、生成摘要等任務(wù)。它支持多種加密算法,包括常見的對(duì)稱加密算法(如 AES、DES)和非對(duì)稱加密算法(如 RSA)。 ??同時(shí),CryptoJS還包括了ECB和CBC兩種模式,其中 ECB模式 :全稱

    2024年02月04日
    瀏覽(27)
  • 三步實(shí)現(xiàn)Java的SM2前端加密后端解密

    三步實(shí)現(xiàn)Java的SM2前端加密后端解密

    秦醫(yī)如毒,無藥可解。 話不多說,先上需要用到的 js文件下載鏈接?? 和?? jsp前端代碼 。 第一步: 下載兩個(gè)必備的js文件——? crypto-js.js 、 sm2.js ? 。 它們的下載鏈接如下↓(該網(wǎng)頁不魔法上網(wǎng)的話會(huì)很卡,畢竟github,建議卡的話就多重新加載幾次,我差不多試了8次才進(jìn)

    2024年02月04日
    瀏覽(88)
  • RSAUtil 前端 JavaScript JSEncrypt 實(shí)現(xiàn) RSA (長文本)加密解密

    文章歸檔:https://www.yuque.com/u27599042/coding_star/cl4dl599pdmtllw1 import JSEncrypt from ‘jsencrypt’ import {stringIsNull} from “@/utils/string_utils.js”:https://www.yuque.com/u27599042/coding_star/slncupw7un3ce7cb import {isNumber} from “@/utils/number_utils.js”:https://www.yuque.com/u27599042/coding_star/tuwmm3ghf5lgo4bw 注意: 此方

    2024年04月22日
    瀏覽(31)
  • RSA加密、解密、簽名、驗(yàn)簽的原理及方法

    一、RSA加密簡介 RSA加密是一種非對(duì)稱加密??梢栽诓恢苯觽鬟f密鑰的情況下,完成解密。這能夠確保信息的安全性,避免了直接傳遞密鑰所造成的被破解的風(fēng)險(xiǎn)。是由一對(duì)密鑰來進(jìn)行加解密的過程,分別稱為公鑰和私鑰。兩者之間有數(shù)學(xué)相關(guān),該加密算法的原理就是對(duì)一極大

    2024年02月05日
    瀏覽(44)
  • 前端請(qǐng)求參數(shù)加密、.NET 后端解密

    前端請(qǐng)求參數(shù)加密、.NET 后端解密

    本文詳細(xì)介紹了前端請(qǐng)求參數(shù)加密、.NET 后端解密,文章較長,請(qǐng)各位看官耐心看完。 目錄 一、前端使用“CryptoJS”,前端AES加密,.NET后端AES解密 1.1、加密解密效果圖 1.2、CryptoJS介紹 1.3、準(zhǔn)備工作:安裝“CryptoJS” 1.3.1、使用npm進(jìn)行安裝 1.3.2、Visual Studio中安裝 1.3.2.1、選擇

    2024年02月08日
    瀏覽(29)
  • Java代碼實(shí)現(xiàn)RSA算法加密解密文件功能

    Java代碼實(shí)現(xiàn)RSA算法加密解密文件功能

    底層算法不做贅述,想要了解自行百度。 RSA屬于非對(duì)稱加密,非對(duì)稱加密有公鑰和私鑰兩個(gè)概念,私鑰自己擁有,不能給別人,公鑰公開。根據(jù)應(yīng)用的不同,我們可以選擇使用不同的密鑰加密: 簽名:使用私鑰加密,公鑰解密。用于讓所有公鑰所有者驗(yàn)證私鑰所有者的身份

    2024年02月12日
    瀏覽(27)
  • AES對(duì)稱加密實(shí)戰(zhàn)——前端js加密后端python解密

    AES對(duì)稱加密實(shí)戰(zhàn)——前端js加密后端python解密

    高級(jí)加密標(biāo)準(zhǔn)(AES, Advanced Encryption Standard),是一種最常見的對(duì)稱加密算法 。其加密流程如下圖所示,發(fā)送方通過密鑰對(duì)明文加密后進(jìn)行網(wǎng)絡(luò)傳輸,接收方用同樣的密鑰將密文解密。在前后端通訊場景中,可利用AES算法對(duì)用戶密碼進(jìn)行加密后傳輸,防止被抓包而造成密碼泄露。

    2024年02月04日
    瀏覽(25)
  • 前端AES加密,后端解密,有效防止數(shù)據(jù)外泄

    前端AES加密,后端解密,有效防止數(shù)據(jù)外泄

    在工作中經(jīng)常遇到密碼明文傳輸這個(gè)問題,為了讓密碼安全些會(huì)讓加密,現(xiàn)在有個(gè)比較方便的AES加密(前端密鑰可能存在泄露風(fēng)險(xiǎn),應(yīng)該放到配置項(xiàng)中): 一、前端加密 1、首先引入前端需要用到的js:crypto-js,下載地址: CryptoJS-v4.1.1 https://www.aliyundrive.com/s/bXP6M8ZxVAD 點(diǎn)擊鏈接

    2024年02月16日
    瀏覽(22)
  • Java RSA加解密-非對(duì)稱加密-公鑰私鑰加解密(使用hutool工具)

    Java RSA加解密-非對(duì)稱加密-公鑰私鑰加解密(使用hutool工具)

    之前一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)展示了使用原生Java進(jìn)行RSA加解密,本文介紹下使用當(dāng)下流行的Hutool工具進(jìn)行RSA加解密的用法。 目錄 一、在Linux環(huán)境下生成公鑰、私鑰文件 二、將生成的公私鑰文件導(dǎo)入項(xiàng)目中并移除pem文件的前后公私鑰標(biāo)記 三、po

    2024年04月23日
    瀏覽(377)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包