JAVA-3DES对称加解密工具(不依赖第三方库)
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class EncryptUtil {// 密钥public static final String ENCRYPT_KEY = "ABCD1234";// 定义加密算法,可用DES,DESede,Blowfishprivate static final String ALGORITHM_DESDE = "DESede";public static void main(String[] args) {// 加密String encPassword = desEdeEncoder("123456", EncryptUtil.ENCRYPT_KEY);System.out.println(encPassword);// 解密String desPassword = desEdeDecoder(encPassword, EncryptUtil.ENCRYPT_KEY);System.out.println(desPassword);}public static boolean isEmpty(String str) {return null == str || str.trim().length() == 0;}/*** 3DES加密** @param src* @param key* @return*/public static String desEdeEncoder(String src, String key) {byte[] bytes = null;try {SecretKeySpec secretKey = new SecretKeySpec(build3DesKey(key), ALGORITHM_DESDE);Cipher cipher = Cipher.getInstance(ALGORITHM_DESDE);cipher.init(Cipher.ENCRYPT_MODE, secretKey);bytes = cipher.doFinal(src.getBytes(StandardCharsets.UTF_8));} catch (Exception e) {throw new RuntimeException(e);}return byte2HexStr(bytes);}/*** 3DES 解密** @param dest* @param key* @return*/public static String desEdeDecoder(String dest, String key) {String desStr;try {SecretKeySpec secretKey = new SecretKeySpec(build3DesKey(key), ALGORITHM_DESDE);Cipher cipher = Cipher.getInstance(ALGORITHM_DESDE);cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] bytes = cipher.doFinal(str2ByteArray(dest));desStr = new String(bytes, StandardCharsets.UTF_8);} catch (Exception e) {throw new RuntimeException(e);}return desStr;}public static String md5Digest(String src) throws NoSuchAlgorithmException {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(src.getBytes(StandardCharsets.UTF_8));return byte2HexStr(bytes);}private static byte[] build3DesKey(String keyStr) {byte[] bytes = new byte[24];byte[] temp = keyStr.getBytes(StandardCharsets.UTF_8);System.arraycopy(temp, 0, bytes, 0, Math.min(bytes.length, temp.length));return bytes;}private static byte[] str2ByteArray(String str) {int byteArrayLength = str.length() / 2;byte[] bytes = new byte[byteArrayLength];for (int i = 0; i < byteArrayLength; i++) {byte b0 = (byte) Integer.valueOf(str.substring(i * 2, i * 2 + 2), 16).intValue();bytes[i] = b0;}return bytes;}private static String byte2HexStr(byte[] bytes) {StringBuilder sbf = new StringBuilder();for (byte aByte : bytes) {String s = Integer.toHexString(aByte & 0xFF);if (s.length() == 1) {sbf.append("0");}sbf.append(s.toUpperCase());}return sbf.toString();}}相关文章:
JAVA-3DES对称加解密工具(不依赖第三方库)
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class EncryptUtil {// 密钥public static final String ENCR…...
基于Matlab卡尔曼滤波的IMU和GPS组合导航数据融合(附上源码+数据)
本文介绍了如何使用Matlab实现惯性测量单元(IMU)和全球定位系统(GPS)组合导航数据融合的卡尔曼滤波算法。通过将IMU和GPS的测量数据进行融合,可以提高导航系统的精度和鲁棒性。我们将详细介绍卡尔曼滤波的原理和实现步…...
net自动排课系统完整源码(适合智慧校园)
目录 1 net自动排课系统完整源码(适合智慧校园) 1.1 后台管理admin 1.1.1 菜单 1.1.2 教学计划 net自动排课系统完整源码(适合智慧校园) 后台管理admin<%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&...
Matlab匿名函数教程
Matlab匿名函数是一种方便、简洁的函数定义方式,可以在不使用函数文件的情况下,直接在命令行或脚本中定义函数。本文将介绍Matlab匿名函数的基本语法和用法。 匿名函数的基本语法如下: function_handle (input_variables) expression其中&…...
【Vue】一文让你进入Vue的大门
Vue简介 官网 ● 英文官网 ● 中文官网 介绍与描述 Vue历史 Vue 是一套用来动态构建用户界面的渐进式JS框架 构建用户界面:把数据通过某种办法变成用户界面 渐进式:Vue可以自底向上逐层的应用,简单应用只需要一个轻量小巧的核心库,…...
Linux mmap读/写触发共享文件页生命周期
概述 Linux的mm内存子系统的核心功能就要要管理各种类型的page,确保能高效分配和释放,让物理内存得以最大化使用。初识内存系统往往关注的是page的申请和管理流程,容易忽略page的释放回收流程,其实理解mm中的内存回收和释放也是最核心的机制。 Linux内核为了支持各种场景…...
linux 用户、组操作
一、创建用户并设置密码 #创建用户 duoergun useradd duoergun #设置用户 duoergun 密码 passwd duoergun二、创建组 #创建组 qingdynasty groupadd qingdynasty三、用户添加到组,用户从组删除 #添加用户duoergun到组qingdynasty usermod -aG qingdynasty duoer…...
MySQL报错this is incompatible withsal mode=only full group by处理办法
问题说明 报这个错误是指,在查询分组时展示了非分组字段。举例: select id , user_name from user group by user_name;上述语句查询id和user_name字段,其中user_name进行了分组,id并没有分组,这时候mysql就会报上述…...
Mybatis 动态语言 - mybatis-freemarker
前面我们介绍了Mybatis动态SQL的使用;本篇我们介绍使用mybatis- freemarker动态语言生成动态SQL。 如果您对Mybatis动态SQL不太了解,建议您先进行了解后再阅读本篇,可以参考: Mybatis 动态SQL – 使用if,where标签动态生成条件语…...
软件源码开发,网络中的“摄像头”:运维监控系统
在日常生活中,我们不管是在大街小巷,还是在商场大厦都可以见到一个圆形或是方形带有镜片的“小盒子”,这个“小盒子”就是摄像头,摄像头作为一个能实时录制记录它能照到范围内的视频图像的工具,可以在丢失物品、抓捕坏…...
ping命令
打开运行窗口 首先,我们需要打开运行窗口,可以通过按下WinR组合键打开。然后,在窗口中输入cmd,进入dos命令。 在命令行中输入ping命令 在dos命令行中,我们可以通过输入ping命令来检测网络连接。例如,我们…...
MFC:程序的托盘显示
介绍 关键技术,API函数Shell_NotifyIcon,具体查看msdn吧 实现的主要代码 #define MY_TRAY_ICON_ID (1)/ //其他代码:略BEGIN_MESSAGE_MAP(CTestShowTrayDlg, CDialogEx)//...ON_MESSAGE(WM_MY_TRAY_ICON, &CTestShowTrayDlg::OnMessag…...
AI绘画:StableDiffusion实操教程-斗破苍穹-云韵-婚服(附高清图下载)
大家好,我是小梦,最近一直研究AI绘画。 不久前,我与大家分享了StableDiffusion的全面教程:“AI绘画:Stable Diffusion 终极宝典:从入门到精通 ” 然而,仍有些读者提出,虽然他们已经…...
JS装饰器的介绍
装饰器的基本介绍 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,访问符,属性或参数上。 装饰器使用expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的…...
微信小程序(原生)使用Swiper实现(商品详情)视频和图片轮播(仿京东/淘宝商品详情头部视频+图片轮播)
一、需求 1、如果第一是视频,不进行自动轮播 2、可以手动滑动切换 3、点击播放视频,也可以手动滑动切换 4、视频播放完后,自动轮播 5、视频可以点击暂停和全屏播放二、最终效果 三、源码 播放icon使用了TDesign组件库 1、wxml <swiper c…...
关于for in 循环会遍历原型链上的属性的问题
关于for in 循环会遍历原型链上的属性的问题 for in可遍历原型链上扩展的属性,Object.keys() 只遍历自身属性 1.使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问: Object.prototype.say"cgl"; // 修改Object.p…...
冠达管理:人民币升值板块个股?
人民币增值是当前热门的论题之一。面对这一趋势,许多投资者开端重视人民币增值板块个股的投资时机。可是,终究哪些职业和个股能够从人民币增值中获益?下面从多个视点分析这个问题。 一、出口相关职业 跟着人民币增值,我国的出口企…...
27.EI文章复现《高比例清洁能源接入下计及需求响应的配电网重构》
下载地址:高比例清洁能源接入下计及需求响应的配电网重构 1主要内容 该程序复现《高比例清洁能源接入下计及需求响应的配电网重构》,以考虑网损成本、弃风弃光成本和开关操作惩罚成本的综合成本最小为目标,针对配电网重构模型的非凸性&…...
mysql的索引结构
索引概述 索引( index )是帮助 MySQL 高效获取数据的数据结构 ( 有序 ) 。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些…...
SMT生产中基板的机械清洁处理法有哪些
在S MT贴片加工 过程中,锡育和助焊剂会产生残留物质,残留物中包含有有机酸和可分解的电离子,某中有机酸狊 有腐蚀作用,电高子难留在焊盘还会引(起短路,而且这些残留物在PCBA板上是非常脏的,而旦不符合顾客…...
解锁B站宝藏:一款让你轻松下载无水印高清视频的神器
解锁B站宝藏:一款让你轻松下载无水印高清视频的神器 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload 你是否经常在B站发现精彩视频,却苦于无法保存到本地?是否因为右上角的…...
稀疏记忆微调技术:解决LLM持续学习中的灾难性遗忘
1. 稀疏记忆微调技术解析 1.1 持续学习的核心挑战 在大型语言模型(LLM)的实际应用中,灾难性遗忘(Catastrophic Forgetting)是持续学习面临的最大障碍。想象一下,当你教会一个学生新知识时,他却…...
信发系统-排版/发布 配置操作教程-智慧大屏幕—东方仙盟
政务大屏幕节目管理-选择系统模板选择对应行业选择适合的模板选中你的节目点击设计设计节目直接管理/上传 资源:图片/视频/网页/文字/文档手指/鼠标选中显示区域上传资源,在右侧点击上传从资源库选择图片选择历史素材上传网站选中网页区域点击上传配置文…...
视频解密神器:3步搞定Widevine加密,重新掌控你的数字内容
视频解密神器:3步搞定Widevine加密,重新掌控你的数字内容 【免费下载链接】video_decrypter Decrypt video from a streaming site with MPEG-DASH Widevine DRM encryption. 项目地址: https://gitcode.com/gh_mirrors/vi/video_decrypter 还在为…...
Encaustic不是滤镜!揭秘热蜡媒介物理特性如何反向重构MJ提示词结构:材料科学×AIGC的跨学科实践
更多请点击: https://intelliparadigm.com 第一章:Encaustic不是滤镜!——热蜡媒介的本质祛魅 Encaustic(热蜡绘画)常被误认为是数字图像处理中的一种“复古滤镜”,实则是一种拥有两千多年历史的实体绘画媒…...
Claude Code项目配置终极指南
Claude Code 项目深度配置指南:从零初始化到现有项目完美改造 在上一篇基础教程中,我们了解了Claude Code CLI的基本使用方法。但要真正发挥Claude Code的全部潜力,项目级别的深度配置才是关键。Claude Code提供了一套完整的配置体系…...
SAP资产会计进阶:深入理解AS91、AB01与ABLDT在期初数据处理中的角色与联动
SAP资产会计核心事务代码解析:AS91、AB01与ABLDT的协同逻辑与实战应用 在SAP S4 HANA资产模块的实施与运维中,期初数据处理往往是项目成败的关键节点。不同于日常资产操作,期初数据迁移涉及历史价值追溯、折旧逻辑重建以及多系统数据对齐等复…...
别再死记硬背了!用Python+Graphviz把离散数学的图论和关系画出来(附代码)
用PythonGraphviz将离散数学中的抽象概念可视化 离散数学是计算机科学的基础课程之一,但其中的图论、二元关系等概念往往因为高度抽象而让学习者感到困惑。传统的死记硬背方式不仅效率低下,也难以真正理解这些概念的本质。本文将介绍如何利用Python的net…...
机器学习之随机森林详解
摘要随机森林(Random Forest)是一种基于Bagging集成学习思想的 ensemble method,通过构建多棵决策树并综合其预测结果来实现分类和回归任务。本文详细介绍了随机森林的核心原理、关键超参数、OOB误差估计机制,以及其在特征重要性分…...
Cadence焊盘绘制实战:从零到一构建PCB封装基石
1. 为什么焊盘设计是PCB封装的基石 刚入行硬件设计那会儿,我总以为画封装就是照着尺寸描边。直到有次量产时发现整批QFN芯片虚焊,才明白焊盘设计才是封装可靠性的命门。Cadence的分离式设计哲学——将焊盘(Padstack)与封装&#x…...
