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

使用CryptoJS實現(xiàn)Vue前端加密,Java后臺解密的步驟和方法

這篇具有很好參考價值的文章主要介紹了使用CryptoJS實現(xiàn)Vue前端加密,Java后臺解密的步驟和方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、crypto.js簡介

??CryptoJS 是一個 JavaScript 庫,提供了一系列密碼學函數(shù)和工具,用于加密、解密、生成摘要等任務。它支持多種加密算法,包括常見的對稱加密算法(如 AES、DES)和非對稱加密算法(如 RSA)。
??同時,CryptoJS還包括了ECB和CBC兩種模式,其中ECB模式:全稱Electronic Codebook(電碼本),在ECB模式中,每個明文分組都被單獨加密,且每個明文分組都被加密為相同的密文分組。也就是說,如果兩個明文分組相同,那么它們的密文分組也相同。CBC模式:全稱Cipher Block Chaining(密文分組鏈接模式),在CBC模式中,每個明文分組都與前一個密文分組進行XOR運算(相異為一)然后再進行加密。因此,密文分組是相互連接的,如果兩個明文分組相同,那么它們的密文分組也會不同。
??這里,我們使用了AES對稱加密算法,并使用了CBC模式實現(xiàn)登錄密碼的加密,實現(xiàn)步驟如下:

2、Vue前端步驟

2.1、安裝CryptoJS
npm install crypto-js
2.2、引入CryptoJS
import CryptoJS from 'crypto-js';
2.3、加密方法
//設置秘鑰和秘鑰偏移量
const SECRET_KEY = CryptoJS.enc.Utf8.parse("1234567890123456");
const SECRET_IV = CryptoJS.enc.Utf8.parse("1234567890123456");
/**
 * 加密方法
 * @param word
 * @returns {string}
 */
function encrypt(word) {
  let srcs = CryptoJS.enc.Utf8.parse(word);
  let encrypted = CryptoJS.AES.encrypt(srcs, SECRET_KEY, {
      iv: SECRET_IV ,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.ZeroPadding
  })
  return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
2.4、解密方法

??該方法,在前端一般是不需要的,前端只需要使用加密方法進行加密即可。

function decrypt(word) {
  let base64  = CryptoJS.enc.Base64.parse(word);
  let srcs = CryptoJS.enc.Base64.stringify(base64);
  const decrypt = CryptoJS.AES.decrypt(srcs, SECRET_KEY, {
    iv: SECRET_IV ,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.ZeroPadding
  });
  const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr;
}

3、Java實現(xiàn)解密的工具類

??CryptoUtil 工具類提供了基于前端CryptoJS一致的加密和解密方法,在后端主要使用到的其中的解密方法。


/**
 * Description: 配合前端CryptoJS實現(xiàn)加密、解密工作。
 * CryptoJS 是一個 JavaScript 庫,提供了一系列密碼學函數(shù)和工具,用于加密、解密、生成摘要等任務。
 * 它支持多種加密算法,包括常見的對稱加密算法(如 AES、DES)和非對稱加密算法(如 RSA)。
 */
public class CryptoUtil {

    private final static String IV = "1234567890123456";//需要前端與后端配置一致
    private final static String KEY = "1234567890123456";

    /**
     * 加密算法,使用默認的IV、KEY
     * @param content
     * @return
     */
    public static String encrypt(String content){
        return encrypt(content,KEY,IV);
    }

    /**
     * 解密算法,使用默認的IV、KEY
     * @param content
     * @return
     */
    public static String decrypt(String content){
        return decrypt(content,KEY,IV);
    }
    /**
     * 加密方法
     * @param content
     * @param key
     * @param iv
     * @return
     */
    public static String encrypt(String content, String key, String iv){
        try{
            // "算法/模式/補碼方式"NoPadding PkcsPadding
            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            int blockSize = cipher.getBlockSize();
            byte[] dataBytes = content.getBytes();
            int plaintextLength = dataBytes.length;
            if (plaintextLength % blockSize != 0) {
                plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
            }
            byte[] plaintext = new byte[plaintextLength];
            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(plaintext);
            return new Base64().encodeToString(encrypted);
        }catch (Exception e) {
            throw new RuntimeException("加密算法異常 CryptoUtil encrypt()加密方法,異常信息:" + e.getMessage());
        }
    }

    /**
     * 解密方法
     * @param content
     * @param key
     * @param iv
     * @return
     */
    public static String decrypt(String content, String key, String iv){
        try {
            byte[] encrypted1 = new Base64().decode(content);
            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            byte[] original = cipher.doFinal(encrypted1);
            return new String(original).trim();
        } catch (Exception e) {
            throw new RuntimeException("加密算法異常 CryptoUtil decrypt()解密方法,異常信息:" + e.getMessage());
        }
    }
}

4、在SpringSecurity項目中如何使用CryptoUtil 解密工具類

??不同項目用戶密碼存儲方式,登錄密碼校驗都有自己的邏輯,在我的項目里,我使用了SpringSecurity框架作為鑒權,同時基于MD5實現(xiàn)了PasswordEncoder接口(QriverMD5PasswordEncoder),其中使用了DigestUtils.md5DigestAsHex()方法對用戶登錄密碼進行了加密保存。因此,我在PasswordEncoder接口的實現(xiàn)方法matches()中,實現(xiàn)了前端傳遞密碼的解密,然后再進行MD5加密后,參與到密碼的對比。QriverMD5PasswordEncoder的實現(xiàn)如下:


/**
 * PasswordEncoder實現(xiàn)類,從5.0版本開始強制要求設置,主要用來配置加密方式
 */
@Component("md5PasswordEncoder")
public class QriverMD5PasswordEncoder implements PasswordEncoder {
    @Override
    public String encode(CharSequence rawPassword) {
        return DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes());
    }

    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
    	//前端登錄密碼解密
        String deRawPassword = CryptoUtil.decrypt(rawPassword.toString());
        String encode = DigestUtils.md5DigestAsHex(deRawPassword.toString().getBytes());
        return encodedPassword.equals( encode );
    }

    public static void main(String[] args) {
        String rawPassword = "EVFon/Y9ed2W/0zc6iQlkg==";
        System.out.println(CryptoUtil.decrypt(rawPassword.toString()));
    }
}

??至此就完成了前端加密傳遞登錄密碼,后端解密使用密碼,同時也保證了登錄密碼MD5加密存在數(shù)據(jù)庫中,關于PasswordEncoder 實現(xiàn)類如何配置,這里不再贅述。文章來源地址http://www.zghlxwxcb.cn/news/detail-759039.html

到了這里,關于使用CryptoJS實現(xiàn)Vue前端加密,Java后臺解密的步驟和方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

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

    最近安全測試的總是測出安全漏洞來,讓開發(fā)改。 想了想干脆把請求參數(shù)都加密下,前端加密后端解密,這樣總差不多了。 看了下AES加密,是對稱的,前后端用這個不太行。 于是想到用RSA加密,是非對稱的,可以前端加密后端解密。 1.前端是vue項目,使用時,需要先執(zhí)行:

    2023年04月21日
    瀏覽(23)
  • java和js實現(xiàn)前端加密后端解密,后端加密前端解密(Base64)

    目錄 1.前端加密后端解密 2.后端加密前端解密 在前端和后端數(shù)據(jù)傳輸時,常常涉及到隱私數(shù)據(jù)的傳輸(例如用戶名和密碼),這時,我們就需要對隱私數(shù)據(jù)進行加密解密 1.前端加密后端解密 ????????1.1 前端jquery實現(xiàn) ????????1.2后端 2.后端加密前端解密 ? ? ? ? 2.1后端加密

    2024年02月16日
    瀏覽(30)
  • 使用非對稱加密(RSA) 實現(xiàn)前端加密后端解密

    使用非對稱加密(RSA) 實現(xiàn)前端加密后端解密

    數(shù)據(jù)加密方式有: 單向加密、對稱加密、非對稱加密、加密鹽、散列函數(shù)、數(shù)字簽名。 1、單向加密 單向加密通過對數(shù)據(jù)進行摘要計算生成密文,密文不可逆推還原。只能加密,不能解密,常用于提取數(shù)據(jù)的指紋信息以此來驗證數(shù)據(jù)的完整性。但是會引發(fā)雪崩效應(雪崩效應

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

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

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

    2024年02月04日
    瀏覽(88)
  • 如何實現(xiàn) DES 加密,解密(uniapp/vue) + Java)

    如何實現(xiàn) DES 加密,解密(uniapp/vue) + Java)

    目錄 ?一、引言 二、 什么是DES? ?三、實際操作 ?1. Uniapp 進行 des 加密/解密 ?2. Java 進行 des 加密/解密 ????????現(xiàn)如今,加密是對數(shù)據(jù)安全處理的基本手段之一。今天我們的背景就是微信開發(fā)中,涉及到支付時用戶個人信息的權限認證操作。今天使用的就是通過DES算法進

    2024年02月04日
    瀏覽(32)
  • SpringBoot+Vue 后端輸出加密,前端請求統(tǒng)一解密

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

    2024年02月09日
    瀏覽(29)
  • 前端使用AES密碼加密、解密,使用詳細(crypto加密解密,前后端分離,AES加密解密)

    1、 首先安裝?crypto-js插件,安裝命令如下:? ? -S等同于--save,保存在package.json文件中,是在dependencies 下, --save安裝包信息將加入到dependencies(生產(chǎn)環(huán)境)中,生產(chǎn)階段的依賴,也就是項目運行時的依賴,就是程序上線后仍然需要依賴; -D等同于--save-dev,也保存在package.j

    2024年02月11日
    瀏覽(23)
  • 從加密到簽名:如何使用Java實現(xiàn)高效、安全的RSA加解密算法?

    從加密到簽名:如何使用Java實現(xiàn)高效、安全的RSA加解密算法?

    目錄 1. 接下來讓小編給您們編寫實現(xiàn)代碼!請?zhí)珊?? 1.1 配置application.yml文件 1.2 RSA算法簽名工具類 1.3 ?RSA算法生成簽名以及效驗簽名測試 1.4 RSA算法生成公鑰私鑰、加密、解密工具類 1.5 RSA算法加解密測試 我們?yōu)槭裁匆褂肦SA算法來進行加解密?? RSA 加密算法是一種非對

    2024年02月12日
    瀏覽(24)
  • 基于vue.js前端+java后臺購物商城系統(tǒng)設計與實現(xiàn)

    基于vue.js前端+java后臺購物商城系統(tǒng)設計與實現(xiàn)

    ?博主介紹 :黃菊華老師《Vue.js入門與商城開發(fā)實戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學生畢業(yè)設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程,學習后應對畢業(yè)設計答辯。 項目配有對應開發(fā)文檔、

    2024年04月14日
    瀏覽(22)
  • vue使用jsencrypt實現(xiàn)rsa前端加密

    vue使用jsencrypt實現(xiàn)rsa前端加密

    介紹 vue 完成 rsa 加密傳輸, jsencrypt 實現(xiàn)參數(shù)的前端加密 在 utils 文件夾中新建 jsencrypt.js 文件,內(nèi)容如下: 注意點:一般公鑰都是后端生成好的,之間給到前端,需要注意的需要讓后端把生成的公鑰放入 .txt 文件中。把 .txt 文件給前端,否則可能會出現(xiàn)無法使用的可能

    2024年02月09日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包