简单数据加解密,JS和JAVA同时实现

server/2024/12/22 23:11:50/

前端Vue调用Java后端接口中的数据进行加密,以避免敏感数据泄露。

现在实现一个高性能加密方法,用来对数据进行加密后传输。算法包括JS的加密和解密方法,也包括Java的加密解密方法。

可以在前端加密,后端解密。也可以在后端加密,前端解密。

JS代码如下

javascript>javascript">import { Base64 } from 'js-base64';
import md5 from 'js-md5';let md5Key = md5('sucwjkey');
function xor(data)
{if (typeof data !== 'string') {return data;}let result = '';for (var i = 0; i < data.length; i++) {var k = i % 32;result += String.fromCharCode(data.charCodeAt(i) ^ md5Key.charCodeAt(k));}return result;
}function enc(data)
{data = Base64.encode(data);data = xor(data);return Base64.encode(data);
}
function dec(data)
{data = Base64.decode(data);data = xor(data);return Base64.decode(data);
}let data = "[{'name':'test',;!.测试一下}]";
console.log('data is')
console.log('原始数据:'+data)
console.log('加密后:'+enc(data))
console.log('解密后:'+dec(enc(data)))

输出如下:

ae9e14e37df94b878a377f459174baa2.png

JAVA代码如下:

java">import java.nio.charset.StandardCharsets;
import java.util.Base64;public class EncryptUtils {public static void main(String[] args) {、String data = "[{'name':cwj,;!.测试一下}]";System.out.println("data is");System.out.println("原始数据:" + data);System.out.println("加密后:" + enc(data));System.out.println("解密后:" + dec(enc(data)));}//解密public static String dec(String data) {return base64Decode(xordata(base64Decode(data)));}//加密public static String enc(String data) {return base64Encode(xordata(base64Encode(data)));}private static String base64Encode(String data) {return Base64.getEncoder().encodeToString(data.getBytes(StandardCharsets.UTF_8));}private static String base64Decode(String data) {return new String(Base64.getDecoder().decode(data));}private static String xordata(String data) {String key = "9722756041bf30025cbff04b515e76bd";byte[] dataBytes = data.getBytes(StandardCharsets.UTF_8);byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);StringBuilder encryptedData = new StringBuilder();for (int i = 0; i < dataBytes.length; i++) {int k = i % keyBytes.length;encryptedData.append((char) (dataBytes[i] ^ keyBytes[k]));}return encryptedData.toString();}}

运行结果如下

70936498d1b84433ab76365512d5ed3f.png


http://www.ppmy.cn/server/27114.html

相关文章

python学习笔记B-14:序列结构之元组--元组的访问与遍历

下面是几种元组的方位与遍历方法&#xff1a; t ("hello","python","world") print("原元组",t) print("t[1]",t[1]) print("t[0:3:2]",t[0:3:2]) #切片操作&#xff0c;从索引值0到索引值为2&#xff0c;步长为…

35 信号处理

什么时候捕捉 如果信号的处理动作是用户自定义函数&#xff0c;在信号递达时就调用这个函数&#xff0c;称为捕捉信号&#xff0c;由于信号处理函数的代码是在用户空间的&#xff0c;处理过程比较复杂&#xff0c;举例如下&#xff1a;用户程序注册了SIGQUIT信号的处理函数sig…

基于3D机器视觉的注塑缺陷检测解决方案

注塑检测是对注塑生产过程中的产品缺陷进行识别和检测的过程。这些缺陷可能包括色差、料流痕、黑点&#xff08;包括杂质&#xff09;等&#xff0c;它们可能是由多种因素引起&#xff0c;如原料未搅拌均匀、烘料时间过长、工业温度局部偏高、模具等问题造成的。不仅影响产品的…

格雷希尔E10系列大电流测试连接器,在新能源汽车大电流接插件的电气测试方案

在新能源汽车的电驱动、电池包等设备的电测试处理中&#xff0c;格雷希尔E10系列电测试连接器具有显著的优势。E10系列的核心设计——插孔/插针&#xff0c;可以达到实验室10万次的插拔寿命&#xff0c;相比传统公母电接头500次左右的连接寿命&#xff0c;E10系列无疑大大减少测…

闪存存储和制造技术概述

闪存存储技术 引言 性能由高到低排序&#xff1a;SLC -> MLC -> TLC -> QLC 根据这个排序读写速度也越来越低&#xff0c;价格越来越便宜 1. SLC SLC&#xff08;Single-Level Cell&#xff0c;单层单元&#xff09;&#xff1a; SLC 闪存具有最高的性能、耐用性和可…

【Qt】Visual Studio中打开Qt工程中的.ui文件闪退

1. 问题 Visual Studio中双击打开Qt工程中的.ui文件闪退。 2. 解决方法 .ui文件鼠标右键打开方式添加msvc中designer.ext路径&#xff08;安装路径\Qt6\5.15.2\msvc2015_64\bin&#xff09;将新设置的打开方式设置为默认打开方式。

Centos卸载mysql

停止MySQL服务 sudo systemctl stop mysqld 查找已安装的MySQL软件包 rpm -qa | grep -i mysql 这将列出所有已安装的MySQL相关软件包。 卸载MySQL软件包 sudo rpm -e --nodeps 软件包名称 将"软件包名称"替换为上一步列出的软件包名称。如果有多个软件包,逐个…

FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流

OBS是一个开源的直播录制软件&#xff0c;英文全称叫做Open Broadcaster Software&#xff0c;广泛用于视频录制、实时直播等领域。OBS不但开源&#xff0c;而且跨平台&#xff0c;兼容Windows、Mac OS、Linux等操作系统。 OBS的官网是https://obsproject.com/&#xff0c;录制…