欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java前后端加密解密crypto-js的實現

 更新時間:2023年05月22日 10:19:47   作者:漁夫搬磚  
這篇文章主要介紹了java前后端加密解密crypto-js的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

項目場景:

適用于接口數據敏感信息,比如 明文傳輸姓名、居住地址、手機號等信息,如果存在明文傳輸敏感數據問題、及數據泄漏風險,則可使用此方法加密解密。

一、下載crypot-js

1.如果為vue項目,安裝cnpm,采用命令安裝即可:

安裝命令:cnpm install crypto-js;

2.如果為一般web項目,https://github.com/brix/crypto-js,進行下載;

二、前端引入crypto-js文件,并命名為secrt.js

import CryptoJS from 'crypto-js'
// 默認的 KEY 與 iv 如果沒有給,可自行設定,但必須16位
const KEY = CryptoJS.enc.Utf8.parse("abcdefgh12345678");
const IV = CryptoJS.enc.Utf8.parse('12345678abcdefgh');
/**
?* AES加密 :字符串 key iv ?返回base64
?*/
export function Encrypt(word, keyStr, ivStr) {
? ? let key = KEY;
? ? let iv = IV;
? ? if (keyStr) {
? ? ? ? key = CryptoJS.enc.Utf8.parse(keyStr);
? ? ? ? iv = CryptoJS.enc.Utf8.parse(ivStr);
? ? }
? ? let srcs = CryptoJS.enc.Utf8.parse(word);
? ? var encrypted = CryptoJS.AES.encrypt(srcs, key, {
? ? ? ? iv: iv,
? ? ? ? mode: CryptoJS.mode.CBC,
? ? ? ? padding: CryptoJS.pad.ZeroPadding
? ? });
? ? return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
/**
?1. AES 解密 :字符串 key iv ?返回base64
?2. ?3. @return {string}
?*/
export function Decrypt(word, keyStr, ivStr) {
? ? let key = KEY;
? ? let iv = IV;
? ? if (keyStr) {
? ? ? ? key = CryptoJS.enc.Utf8.parse(keyStr);
? ? ? ? iv = CryptoJS.enc.Utf8.parse(ivStr);
? ? }
? ? let base64 = CryptoJS.enc.Base64.parse(word);
? ? let src = CryptoJS.enc.Base64.stringify(base64);
? ? let decrypt = CryptoJS.AES.decrypt(src, key, {
? ? ? ? iv: iv,
? ? ? ? mode: CryptoJS.mode.CBC,
? ? ? ? padding: CryptoJS.pad.ZeroPadding
? ? });
? ? let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
? ? return decryptedStr.toString();
}

三、前端頁面引入并加密數據

import {Encrypt} from '../../secrt.js'
//text為需要加密的內容
var userId= Encrypt(text);

四、后端解密數據

1.pom引用

2.創(chuàng)建工具類

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class SecretUtil {
? ? /***
? ? ?* key和iv值可以隨機生成,確保與前端的key,iv對應
? ? ?*/
? ? private static String KEY = "abcdefgh12345678";
? ? private static String IV = "12345678abcdefgh";
? ? /***
? ? ?* 加密
? ? ?*?
? ? ?* @param data 要加密的數據
? ? ?* @return encrypt
? ? ?*/
? ? public static String encrypt(String data) {
? ? ? ? return encrypt(data, KEY, IV);
? ? }
? ? /***
? ? ?* ?解密
? ? ?* @param data 要解密的數據
? ? ?*/
? ? public static String desEncrypt(String data) {
? ? ? ? return desEncrypt(data, KEY, IV);
? ? }
? ? /**
? ? ?* 加密方法
? ? ?*/
? ? private static String encrypt(String data, String key, String iv) {
? ? ? ? try {
? ? ? ? ? ? // "算法/模式/補碼方式"NoPadding PkcsPadding
? ? ? ? ? ? Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
? ? ? ? ? ? int blockSize = cipher.getBlockSize();
? ? ? ? ? ? byte[] dataBytes = data.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(), "AES");
? ? ? ? ? ? IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
? ? ? ? ? ? cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
? ? ? ? ? ? byte[] encrypted = cipher.doFinal(plaintext);
? ? ? ? ? ? return new Base64().encodeToString(encrypted);
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? return null;
? ? ? ? }
? ? }
? ? /**
? ? ?* 解密方法
? ? ?*/
? ? private static String desEncrypt(String data, String key, String iv) {
? ? ? ? try {
? ? ? ? ? ? byte[] encrypted1 = new Base64().decode(data);
? ? ? ? ? ? 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) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? return null;
? ? ? ? }
? ? }
}

3.數據解密

@GetMapping(value = "/userInfo")
 public getUserInfo(@RequestParam(name = "userId") String userId)
    String userId= desEncrypt(userId);
}

到此這篇關于java前后端加密解密crypto-js的實現的文章就介紹到這了,更多相關java 加密解密crypto-js內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Calcite使用SQL實現查詢csv/json文件內容

    Calcite使用SQL實現查詢csv/json文件內容

    calcite可以支持文件系統(tǒng)的數據源適配, 其實官方已經提供了相應的能力, 其支持csv和json的查詢適配,下面我們就來看看Calcite如何使用SQL實現查詢csv/json文件內容吧
    2025-01-01
  • 關于idea中ssm框架的編碼問題分析

    關于idea中ssm框架的編碼問題分析

    在實際開發(fā)中需要將操作系統(tǒng)編碼、文件編碼、頁面編碼以及tomcat服務器編碼保持一致,而tomcat在默認情況下是使用UTF-8,這就使得其打印的日志文件出現中文亂碼,因此在一般情況下,只需要將tomcat服務器的編碼改為GBK即可
    2021-06-06
  • springboot使用@value注入配置失敗的解決

    springboot使用@value注入配置失敗的解決

    這篇文章主要介紹了springboot使用@value注入配置失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • mybatis-plus插入失敗的問題及解決

    mybatis-plus插入失敗的問題及解決

    這篇文章主要介紹了mybatis-plus插入失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot實現elasticsearch索引操作的代碼示例

    SpringBoot實現elasticsearch索引操作的代碼示例

    這篇文章主要給大家介紹了SpringBoot如何實現elasticsearch 索引操作,文中有詳細的代碼示例,感興趣的同學可以參考閱讀下
    2023-07-07
  • Java的NIO之并發(fā)環(huán)境下非阻塞IO技術詳解

    Java的NIO之并發(fā)環(huán)境下非阻塞IO技術詳解

    這篇文章主要介紹了Java的NIO之并發(fā)環(huán)境下非阻塞IO技術詳解,Java NIO(New IO)是Java平臺提供的一種用于高效處理I/O操作的API,它引入了一組新的類和概念,以提供更好的性能和可擴展性,需要的朋友可以參考下
    2023-09-09
  • 基于application和bootstrap的加載順序及區(qū)別說明

    基于application和bootstrap的加載順序及區(qū)別說明

    這篇文章主要介紹了application和bootstrap的加載順序及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • eclipse自動提示和自動補全功能實現方法

    eclipse自動提示和自動補全功能實現方法

    這篇文章主要介紹了eclipse自動提示和自動補全的相關內容,文中向大家分享了二者的實現方法代碼,需要的朋友可以了解下。
    2017-09-09
  • 一文學會如何在SpringBoot中使用線程池執(zhí)行定時任務

    一文學會如何在SpringBoot中使用線程池執(zhí)行定時任務

    在開發(fā)現代應用程序時,定時任務是一項常見的需求,SpringBoot提供了一個強大的定時任務框架,可以輕松地執(zhí)行各種定時任務,結合線程池的使用,可以更好地管理任務的執(zhí)行,提高系統(tǒng)的性能和穩(wěn)定性,本文將介紹如何在Spring Boot中使用線程池執(zhí)行定時任務
    2023-06-06
  • Java class文件格式之數據類型_動力節(jié)點Java學院整理

    Java class文件格式之數據類型_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java class文件格式之數據類型的相關資料,需要的朋友可以參考下
    2017-06-06

最新評論