当前位置: 首页 > news >正文

java前后端加密解密crypto-js_java crypto

}

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.创建工具类

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) {

最后

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。

大厂面试题

面试题目录

这里预祝各位成功拿下自己心仪的offer。

[外链图片转存中…(img-azMH8KCP-1720094266456)]

[外链图片转存中…(img-IdHsueT2-1720094266458)]

[外链图片转存中…(img-sbqKfeyL-1720094266459)]

[外链图片转存中…(img-bkKDZBQT-1720094266460)]

相关文章:

  • python练习4
  • 大数据开发中如何计算用户留存及SQL示例
  • 常见VPS主机术语有哪些?VPS术语解析
  • element el-table表格切换分页保留分页数据+限制多选数量
  • GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记
  • React快速入门-跟着AI学习react
  • 二手物品交易小程序的设计
  • leetcode LCR072.x的平方根
  • 优化页面加载时间
  • Attention (注意力机制)
  • 香橙派AIpro实测:YOLOv8便捷检测,算法速度与运行速度结合
  • 前后端分离:四种开发模式与实践指南
  • 微信小程序毕业设计-球馆预约系统项目开发实战(附源码+论文)
  • labview排错
  • 02-部署LVS-DR群集
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • Apache Spark Streaming 使用实例
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • javascript 哈希表
  • Javascript编码规范
  • JS专题之继承
  • python学习笔记-类对象的信息
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 汉诺塔算法
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 三栏布局总结
  • 实现简单的正则表达式引擎
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 2017年360最后一道编程题
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​水经微图Web1.5.0版即将上线
  • #APPINVENTOR学习记录
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (Oracle)SQL优化技巧(一):分页查询
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ZT)薛涌:谈贫说富
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • .bat文件调用java类的main方法
  • .NET Core中Emit的使用
  • .net framework profiles /.net framework 配置
  • .NET构架之我见
  • .net项目IIS、VS 附加进程调试
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @Transactional 竟也能解决分布式事务?
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • []指针
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [C++] Windows中字符串函数的种类
  • [CF482B]Interesting Array