import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* DES 算法
*
* @author Fu Wei
*
*/
public class DesUtils {
private static final Logger LOG = LoggerFactory.getLogger(DesUtils.class);
private final static String DES = "DES";
private static final String ENCODE = "UTF-8";
private static final String DECODE = "UTF-8";
/**
* 加密String明文输入,String密文输出
*
* @param strMing
* String明文
* @return String密文
* @throws DesException
*/
public static String getEncString(String strMing, byte[] byteKey) {
byte[] byteMi = null;
byte[] byteMing = null;
String strMi = null;
try {
byteMing = strMing.getBytes(ENCODE);
byteMi = encrypt(byteMing, byteKey);
strMi = Base64Utils.encode(byteMi);
} catch (UnsupportedEncodingException e) {
LOG.error("不支持的编码",e);
}
return strMi;
}
/**
* 解密 以String密文输入,String明文输出
*
* @param strMi
* String密文
* @return String明文
*/
public static String getDesString(String strMi, byte[] byteKey) {
byte[] byteMing = null;
byte[] byteMi = null;
String strMing = null;
try {
byteMi = Base64Utils.decode(strMi);
byteMing = decrypt(byteMi, byteKey);
strMing = new String(byteMing, DECODE);
} catch (Exception e) {
LOG.error("获取Des错误",e);
}
return strMing;
}
/**
* 加密
*
* @param src
* 数据源
* @param key
* 密钥,长度必须是8的倍数
* @return 返回加密后的数据
* @throws DesException
*/
public static byte[] encrypt(byte[] src, byte[] key) {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
try {
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成
// 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
// 现在,获取数据并加密
// 正式执行加密操作
return cipher.doFinal(src);
} catch (NoSuchAlgorithmException e) {
LOG.error("算数错误",e);
} catch (InvalidKeyException e) {
LOG.error("无效key错误",e);
} catch (InvalidKeySpecException e) {
LOG.error("无效key戳无",e);
} catch (NoSuchPaddingException e) {
LOG.error("填充错误",e);
} catch (IllegalBlockSizeException e) {
LOG.error("非法数据块",e);
} catch (BadPaddingException e) {
LOG.error("错误的填充",e);
}
return null;
}
/**
* 解密
*
* @param src
* 数据源
* @param key
* 密钥,长度必须是8的倍数
* @return 返回解密后的原始数据
* @throws DesException
* @throws Exception
*/
public static byte[] decrypt(byte[] src, byte[] key) {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
try {
// 从原始密匙数据创建一个DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成
// 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
// 现在,获取数据并解密
// 正式执行解密操作
return cipher.doFinal(src);
} catch (NoSuchAlgorithmException e) {
LOG.error("算数错误",e);
} catch (InvalidKeyException e) {
LOG.error("无效key错误",e);
} catch (InvalidKeySpecException e) {
LOG.error("无效key戳无",e);
} catch (NoSuchPaddingException e) {
LOG.error("填充错误",e);
} catch (IllegalBlockSizeException e) {
LOG.error("非法数据块",e);
} catch (BadPaddingException e) {
LOG.error("错误的填充",e);
}
return null;
}
}
相关推荐
DES 算法
DES全称为Data Encryption Standard,即数据加密标准,是一种使用对称密钥的分组加密算法,它是1972年由美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,每次对一个分组进行加密;密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1),分组后的明文组和56位的密钥进行迭代加密,输出也是64bit。
Java实现DES加密解密
DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥。 加密原理: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这...
DES加密算法
1 相关概念 数据加密标准(DES:Data Encryption Standard) – 对称分组密码算法; – 1979年,美国银行协会批准使用; – 1980年,美国国家标准局(ANSI)同意DES作为私人使用的标准,称之为DEA (ANSI X.392) ; – 1983年,国际化标准组织ISO同意DES作为国际标准,称之为DEA-1; – 该标准规定每五年审查一次,计划十年后采用新标准;...
java DES 加密和解密
java DES 加密和解密。
密码学之DES算法
DES(Data Encryption Standard),即数据加密标准,是一种广泛使用的对称密钥加密算法。它是由IBM在20世纪70年代初期设计,并在1977年被美国国家标准局(NBS,现国家标准与技术研究院NIST)正式采纳为联邦信息处理标准(FIPS)。DES算法使用56位密钥对64位的数据块进行加密,产生64位的密文。其加密过程包括初始置换、16轮迭代的Feistel网络、以及最终的逆置换。
密码学算法——DES密码算法 c++实现
DES算法作为比较经典的对称密钥算法,还是有深入学习的必要。
SSM实现mysql数据库账号密码加密连接
创建DesUtil类 public class DesUtil { /** 字符串默认键值 */ private static String strDefaultKey = "mykey"; /** 加密工具 */ private Cipher encryptCipher = null; /** 解密工具 */ private Cipher decryptCipher = null; /** * 暗号化 明文入力String 密文出力 * * @param strMing.
Java:实现DES加解密算法(附完整源码)
Java:实现DES加解密算法(附完整源码)
【算法】Java实现DES算法
DES(Data Encryption Standard)是一种对称密钥加密算法,它是在1977年被美国国家标准局(NBS,现在的NIST)发布的。DES使用相同的密钥对数据进行加密和解密,因此属于对称加密算法。它以64位为分组大小,使用56位的密钥(实际上是8个奇偶校验位被舍弃)对数据进行加密和解密操作。DES算法通过将64位的明文分为左右两个32位的半块,然后对这两个半块进行一系列的迭代加密和置换操作,最终得到64位的密文。DES算法的安全性主要依赖于密钥的保密性和算法的强度。
学习STM32的流体水位传感器
引言: 流体水位传感器是一种常用于测量液体水位的设备,广泛应用于水位监测、液位控制和流量计量等领域。STM32是一款功能强大的单片机,具有丰富的外设和灵活的编程能力,非常适合用于流体水位传感器的开发。本文将介绍如何使用STM32开发板与流体水位传感器进行连接和通信,并通过编写代码实现水位的测量和显示。五、总结: 通过以上的代码示例,我们可以实现使用STM32开发板与流体水位传感器进行连接和通信的功能。三、编写代码: 以下是使用STM32CubeIDE编写的示例代码,实现了读取流体水位传感器的功能。
保姆级教程:用STM32CubeMX HAL库搞定ESP8266连接,附串口printf调试全流程
本文提供了一份详细的STM32CubeMX HAL库教程,指导开发者如何实现ESP8266无线模块的连接与调试。从开发环境搭建、串口配置到AT指令通信解析,涵盖了物联网开发中的关键步骤和常见问题解决方案,帮助开发者快速掌握STM32与ESP8266的集成技术。
C# 实现DES加密解密(详解附源码)
DES算法是一种最通用的对称密钥算法,因为算法本身是公开的,所以其安全性在于密钥的安全性。基于密钥的算法通常有两类:对称算法和公开密钥算法。对称算法的对称性体现在加密密钥能够从解密密钥推算出来,反之亦然。在大多数对称算法中,加解密的密钥是相同的,DES就是这样。可见,对称密钥算法的加解密密钥都是保密的。而公开密钥算法的加密密钥是公开的,解密密钥是保密的。 DES 加密算法的整体流程图如图1-6。...
ORB-SLAM3单目+IMU实战:从数据加载到位姿优化的完整流程解析
本文详细解析了ORB-SLAM3单目+IMU模式的完整实战流程。从EuRoC等数据集的数据格式准备、系统启动与数据流入口,到帧构建、IMU预积分、视觉-惯性联合初始化,再到基于运动模型的跟踪、局部地图优化及多线程协同,提供了从环境配置到代码解读的全面指南,并分享了参数调优与性能分析的实用调试经验。
Java实现DES对称加密算法(附Android下3DES的JNI源码)
Java实现DES对称加密算法 Sun公司在Java Platform Standard Ed.6中引入了javax.crypto软件包,javax.crypto软件包为加密操作提供类和接口。在此包中定义的加密操作包括加密、密钥生成和密钥协商,以及消息验证码(Message Authentication Code,MAC)生成。 加密支持包括对称密码、非对称密码、块密码和流密码。此包还支
【PLC】三菱plc控件安装 component Movedata had the following error ... Error Number:-119
Windows 10 专业版/企业版本版本号:22H2操作系统内部版本:19045.3448。
高通8155车机系统里,安卓和QNX是怎么‘打电话’的?聊聊HAB通信框架那些事
本文深入解析了高通8155车机系统中HAB通信框架如何实现安卓与QNX的高效协同。作为异构系统的通信桥梁,HAB通过共享内存和中断信号机制,在多媒体数据传输中展现出零拷贝、硬件加速等优势,成为智能座舱实现实时性与生态丰富性平衡的关键技术。
DES算法实现(C++版)
一、DES算法原理 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、DES算法原理系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
IFIX往Mysql数据库同步数据方法
通过IFix数据库向Mysql数据库同步数据
2、DES算法
DES算法 算法流程--加密的详细位数变化 算法的特点及现状 3DES加密算法
AI挖矿技术全景解析:从智能勘探到自主开采的2025年度技术演进与产业变革
随着全球关键矿产资源需求激增与开采难度加剧,人工智能(AI)技术正在重塑矿业全生命周期。本文系统综述了2025年AI挖矿技术的最新进展,涵盖从地质勘探、资源评估到自主开采、安全监控的完整技术链条。基于Elsevier 2025年发表的最新研究成果及IEEE会议前沿动态,本文深入分析了深度学习、强化学习、计算机视觉等核心技术在矿物识别、品位预测、设备维护等场景的应用机制。研究数据显示,AI技术已使勘探成功率提升45%,设备停机时间减少35%,整体运营效率提高40%以上。
YOLOv8全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题
DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。
python实现DES算法
DES 算法是由美国 IBM 公司在 20 世纪 70 年代提出,并被美国政府、美国国家标准局和美国国家标准协会采纳和承认的一种标准加密算法。它属于分组加密算法,即在明文加密和密文解密过程中,信息都是按照固定长度分组后进行处理的。混淆和扩散是它采用的两个最重要的安全特性。
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
DES算法
密码学以及应用:几本重要的参考教材 1、现代密码学及应用(理查德E布拉胡特) 2、密码学基础中文版 3、密码学原理与实践 4、深入浅出密码学 常用加密技术原理与应用 5、现代密码学 6、应用密码学实验 7、图解密码技术 1、概述 (1)des是一种将64位(8字节)明文加密成64比特密文的对称加密算法,实际密钥的长度是56比特,但是从规格上来说,des的密钥长度是64比特(8字节),每隔7比特设置一个校验比特(也就是第8,16,24,32,40,48,56,64位); (2)des.
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
DES分组加密算法
一:分组加密算法 1.1.概念 分组密码是将明文数字序列按照固定长度分组,并且用同一个密钥和同一个加密算法逐组加密,从而将各个明文分组变换成为密文分组的密码。 1.2.安全原则 (1)混乱原则:使得密文和对应明文和密钥之间的关系足够复杂,以至于密码分析者无法利用这种关系。 (2)扩散原则:使得每一个明文bit和密钥bit影响尽可能多的密文bit,用来隐藏明文的统计特性和结构规律...
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
9583



被折叠的 条评论
为什么被折叠?



