cryptojs加密和java解密:AES算法

试了一下午终于跑通了,一开始尝试RC4算法生成的密文在java中解密不出来,放弃了,改用AES。

js代码

import aes from 'crypto-js/aes';
import base from 'crypto-js/enc-base64';function encrypt(plaintext: string) {const iv = base.parse('ZGYyMzRzZDIzNDEyMzU2Zw==');const key = base.parse('ZGYyMzRzZGRzYWVxZWZ2ZA==');// 如果.toString()改成.ciphertext.toString(),则java解密时要使用HexUtil.decode,否则使用BASE64Util.decodereturn aes.encrypt(plaintext, key, {iv: iv}).toString();}

java代码

import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;/*** AES工具类,密钥必须是16位字符串*/
public class AESUtils {/**偏移量,必须是16位字符串*/private static final String IV_STRING = "df234sd23412356g";/*** 默认的密钥*/public static final String DEFAULT_KEY = "df234sddsaeqefvd";public static String encryptData(String content) {byte[] encryptedBytes = null;try {byte[] byteContent = content.getBytes("UTF-8");// 注意,为了能与 iOS 统一// 这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成byte[] enCodeFormat = DEFAULT_KEY.getBytes();SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");byte[] initParam = IV_STRING.getBytes();IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);// 指定加密的算法、工作模式和填充方式Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);encryptedBytes = cipher.doFinal(byteContent);// 同样对加密后数据进行 base64 编码String encodeStr = BASE64Util.encode(encryptedBytes);
//            String encodeStr = HexUtil.encode(encryptedBytes);encodeStr = encodeStr.replace("%","%25").replace("&","%26").replace("+","%2B");return encodeStr;
//            return parseByte2HexStr(encryptedBytes);} catch (Exception e) {e.printStackTrace();}return null;}public static String decryptData(String content) {try {content = content.replace("%25","%").replace("%26","&").replace("%2B","+");// base64 解码byte[] encryptedBytes = BASE64Util.decode(content);
//        	byte[] encryptedBytes = HexUtil.decode(content);
//        	byte[] encryptedBytes = parseHexStr2Byte(content);byte[] enCodeFormat = DEFAULT_KEY.getBytes();SecretKeySpec secretKey = new SecretKeySpec(enCodeFormat, "AES");byte[] initParam = IV_STRING.getBytes();IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);byte[] result = cipher.doFinal(encryptedBytes);return new String(result, "UTF-8");} catch (Exception e) {e.printStackTrace();}return null;}public static void main(String[] args) {byte[] bytes = IV_STRING.getBytes();String base64Str = Base64.encodeBase64String(bytes);// js 中的iv用这个base64StrSystem.out.println(base64Str);bytes = DEFAULT_KEY.getBytes();base64Str = Base64.encodeBase64String(bytes);// js 中的key用这个base64StrSystem.out.println(base64Str);System.out.println("用户加密"+AESUtils.encryptData("《湖北省能源发展“十四五”规划》提出,适度超前推进充电础基设施建设,到2025年全省充电桩达到50万个以上。"));System.out.println("用户解密"+AESUtils.decryptData("HYezy8lsT3ql6uAZxm/7vBCZAI0kxUpvny9tJLRbMJg/Mr4dCalEqC19z8Yl21tEuEdzGWTqTjIASOqx/FL+XimSZt1seFUpJrJ5E/2XorWwFZNMXKSURFdw8wV7savQJbVaTwZuJ4yML6ok1VwQ8y8yAqmr0TG38FLovyfEhQcVVOx0+UmQdsOLpERuYQDE9Pw216beyhml1BZNDhC91Q=="));}}

上面用到的BASE64Util.decode为

	public static byte[] decode(String base64str) throws Exception { //byte[] b=base64str.getBytes();Base64 base64=new Base64();b=base64.decode(b);return b;}

HexUtil.decode为

    public static byte[] decode(String src) {int m = 0, n = 0;int byteLen = src.length() / 2;byte[] ret = new byte[byteLen];for (int i = 0; i < byteLen; i++) {m = i * 2 + 1;n = m + 1;int intVal = Integer.decode("0x" + src.substring(i * 2, m) + src.substring(m, n));ret[i] = Byte.valueOf((byte)intVal);}return ret;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文解读】:大模型免微调的上下文对齐方法

本文通过对alignmenttuning的深入研究揭示了其“表面性质”&#xff0c;即通过监督微调和强化学习调整LLMs的方式可能仅仅影响模型的语言风格&#xff0c;而对模型解码性能的影响相对较小。具体来说&#xff0c;通过分析基础LLMs和alignment-tuned版本在令牌分布上的差异&#…

测试:SSE VS WebSocket

SSE&#xff08;Server-Sent Events&#xff09; SSE&#xff08;Server-Sent Events&#xff09;接口是一种实现服务器到客户端单向实时通信的技术。通过SSE&#xff0c;服务器可以主动向客户端推送数据&#xff0c;而不需要客户端不断地向服务器请求数据。这种技术特别适合于…

100多种视频转场素材|专业胶片,抖动,光效电影转场特效PR效果预设

100多种 Premiere Pro 效果预设&#xff0c;包含&#xff1a;“胶片框架”、“胶片烧录”、“彩色LUT”、“相机抖动”、“电影Vignette”和“胶片颗粒”。非常适合制作复古风格的视频&#xff0c;添加独特的色彩。包括视频教程。 来自PR模板网&#xff1a;https://prmuban.com…

git 本地有改动,远程也有改动,且文件是自动生成的配置文件

在改动过的地方 文件是.lock文件&#xff0c;自动生成的。想切到远程的分支&#xff0c;但是远程的分支也有改动过。这时候就要解决冲突&#xff0c;因为这是两个分支&#xff0c;代码都是不一样的&#xff0c;要先把这改动的代码提交在本地或者提交在本分支的远程才可以切到其…

在Arch Linux上安装yay

有点麻烦。 准备 # pacman -Syu # pacman -S --needed base-devel git 变身为普通用户 不能使用root下载代码。所以要变身为普通用户&#xff1a; # sueradd tsit # su tsit 下载代码 $ git clone https://aur.archlinux.org/yay.git 编译安装 $ cd yay $ makepkg -si…

ke13--10章-1数据库JDBC介绍

注册数据库(两种方式),获取连接,通过Connection对象获取Statement对象,使用Statement执行SQL语句。操作ResultSet结果集 ,回收数据库资源. 需要语句: 1Class.forName("DriverName");2Connection conn DriverManager.getConnection(String url, String user, String…

在 CentOS 或 Red Hat 系统上安装 Citus 组件

要在 CentOS 或 Red Hat 系统上安装 Citus 组件&#xff0c;你可以按照以下步骤操作&#xff1a; 首先&#xff0c;使用 curl 命令下载 Citus 社区版的安装脚本&#xff1a; curl https://install.citusdata.com/community/rpm.sh > add-citus-repo.sh接着&#xff0c;使用 …

使用 PyInstaller 将 Python 脚本转换为可执行文件(.exe)

安装库&#xff1a; pip install pyinstaller 使用方法&#xff1a; pyinstaller --onefile your_python_file.py 自定义可执行文件的特性 你可以使用一些可选参数来自定义生成的可执行文件的特性。例如&#xff0c;你可以使用 --icon 参数设置生成的可执行文件的图标&#…

Qt国际化翻译Linguist使用

QT的国际化是非常方便的&#xff0c;简单的说就是QT有自带的翻译工具把我们源代码中的字符串翻译成任何语言文件&#xff0c;再把这个语言文件加载到项目中就可以显示不同的语言。下面直接上手&#xff1a; 步骤一&#xff1a;打开pro文件&#xff0c;添加&#xff1a;TRANSLA…

常见的Python编程练习题及其答案解析附示例代码详解

以下是几个常见的Python编程练习题及其答案解析&#xff1a; 1. 编写一个程序&#xff0c;将输入的字符串反转并输出。 def reverse_string(s):return s[::-1]input_str input("请输入一个字符串&#xff1a;") print("反转后的字符串是&#xff1a;", …

idea快速定位文件、自动定位文件位置

如何快速定位到Student类的位置 如下图&#xff1a;点击类似瞄准按钮的图标即可 自动定位到文件位置 打开设置&#xff0c;勾选这个Always Select Opened File 这样子你点击文件他就会自动追踪&#xff0c;切换一个追踪一个&#xff1b; 事半功倍 &#xff01;&#xff01…

[揭秘] 文件恢复工具背后的真相!所有删除的文件都可以恢复吗

许多数据恢复工具声称它们可以在您意外删除文件时为您提供帮助。然而&#xff0c;并非所有数据恢复工具都有相同的目的。有些是针对特定文件类型而设计的&#xff0c;而另一些则无法处理用户的请求。 当我们谈论数据恢复工具时&#xff0c;用户存在很多误解。每个人最常见的问…

Vue配置代理解决跨域

Network的status中报CORS error指在前端&#xff08;Vue.js&#xff09;发起跨域请求时&#xff0c;被服务器拒绝访问的错误 在本地开发环境中&#xff0c;Vue.js 将默认从 http://localhost:8080 启动服务器。如果浏览器访问服务器时使用的 URL 不是该地址&#xff0c;就可能…

编程创意汇聚地,打造个性作品集 | 开源日报 No.97

spring-projects/spring-boot Stars: 70.4k License: Apache-2.0 Spring Boot 是一个用于简化 Spring 应用程序开发的框架&#xff0c;它通过提供默认配置和约定大于配置的方式来减少开发者的工作量。Spring Boot 可以快速地创建独立的、生产级别的基于 Spring 框架的应用程序…

Element-ui框架完成vue2项目的vuex的增删改查

看效果图是否是你需要的 这是原来没有Element-ui框架的 首先&#xff0c;你要在你的项目里安装Element-ui yarn命令 yarn add element-uinpm命令 npm install element-ui --save好了现在可以粘贴代码 //main.js import Vue from vue import Vuex from vuex import VueRouter …

Vue.observable

让一个对象可响应。Vue 内部会用它来处理 data 函数返回的对象。 返回的对象可以直接用于渲染函数和计算属性内&#xff0c;并且会在发生变更时触发相应的更新。也可以作为最小化的跨组件状态存储器&#xff0c;用于简单的场景&#xff1a; const state Vue.observable({ coun…

【react】动态页面转换成html文件下载,解决样式问题

需求 今天遇到一个需求&#xff0c;挺恶心人的&#xff0c;将一个在线文档页面&#xff0c;可以导出成为html页面查看。 看到网上有使用fs模块&#xff0c;通过react的ReactDOMServer.renderToStaticMarkup将组件转成html字符串&#xff0c;输出文件了。 但是我尝试了&#x…

【1day】蓝凌OA 某接口敏感信息泄露漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现 五、漏洞修

STL(一)(pair篇)

1.pair的定义和结构 在c中,pair是一个模板类,用于表示一对值的组合它位于<utility>头文件中 pair的定义如下: template<class T1, class T2> struct pair{T1 first; //第一个值T2 second; //第二个值//构造函数pair();pair(const T1&x,const T2&y);//比较…

3、Linux_系统用户管理

1.Linux 用户管理 1.1概述 Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。root用户是系统默认创建的管理员账号。 1.2添加用户 语法 useradd […