Des算法通用类

DES算法详细设计 一、DES算法原理概述 ###DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。DES是一种分组密码,是两 阅读详情

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算法的基本原理 DES算法是应用最为广泛的对称加密算法。它主要应用在计算机网络通信、电子资金传送系统、保护用户文件,此外,DES还可用于计算机用户识别系统中。那么,具体什么是DES算法,DES算法的基本原理是什么,本文将给大家详细介绍一下。 阅读详情

相关推荐

DES 算法

DES全称为Data Encryption Standard,即数据加密标准,是一种使用对称密钥的分组加密算法,它是1972年由美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,每次对一个分组进行加密;密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1),分组后的明文组和56位的密钥进行迭代加密,输出也是64bit。

哦o7575 的博客 9583

Java实现DES加密解密

DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥。 加密原理: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这...

king的专栏 10万+

DES加密算法

1 相关概念 数据加密标准(DES:Data Encryption Standard) – 对称分组密码算法; – 1979年,美国银行协会批准使用; – 1980年,美国国家标准局(ANSI)同意DES作为私人使用的标准,称之为DEA (ANSI X.392) ; – 1983年,国际化标准组织ISO同意DES作为国际标准,称之为DEA-1; – 该标准规定每五年审查一次,计划十年后采用新标准;...

浮云渐渐 1万+

java DES 加密和解密

java DES 加密和解密。

.NET 人工智能实践 2143

密码学之DES算法

DES(Data Encryption Standard),即数据加密标准,是一种广泛使用的对称密钥加密算法。它是由IBM在20世纪70年代初期设计,并在1977年被美国国家标准局(NBS,现国家标准与技术研究院NIST)正式采纳为联邦信息处理标准(FIPS)。DES算法使用56位密钥对64位的数据块进行加密,产生64位的密文。其加密过程包括初始置换、16轮迭代的Feistel网络、以及最终的逆置换。

零度°C的博客 4408

密码学算法——DES密码算法 c++实现

DES算法作为比较经典的对称密钥算法,还是有深入学习的必要。

suixiang的博客 2348

SSM实现mysql数据库账号密码加密连接

创建DesUtil类 public class DesUtil { /** 字符串默认键值 */ private static String strDefaultKey = "mykey"; /** 加密工具 */ private Cipher encryptCipher = null; /** 解密工具 */ private Cipher decryptCipher = null; /** * 暗号化 明文入力String 密文出力 * * @param strMing.

qq_42738826的博客 837

Java:实现DES加解密算法(附完整源码)

Java:实现DES加解密算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 827

【算法】Java实现DES算法

DES(Data Encryption Standard)是一种对称密钥加密算法,它是在1977年被美国国家标准局(NBS,现在的NIST)发布的。DES使用相同的密钥对数据进行加密和解密,因此属于对称加密算法。它以64位为分组大小,使用56位的密钥(实际上是8个奇偶校验位被舍弃)对数据进行加密和解密操作。DES算法通过将64位的明文分为左右两个32位的半块,然后对这两个半块进行一系列的迭代加密和置换操作,最终得到64位的密文。DES算法的安全性主要依赖于密钥的保密性和算法的强度。

分享Java硬核干货 1万+

学习STM32的流体水位传感器

引言: 流体水位传感器是一种常用于测量液体水位的设备,广泛应用于水位监测、液位控制和流量计量等领域。STM32是一款功能强大的单片机,具有丰富的外设和灵活的编程能力,非常适合用于流体水位传感器的开发。本文将介绍如何使用STM32开发板与流体水位传感器进行连接和通信,并通过编写代码实现水位的测量和显示。五、总结: 通过以上的代码示例,我们可以实现使用STM32开发板与流体水位传感器进行连接和通信的功能。三、编写代码: 以下是使用STM32CubeIDE编写的示例代码,实现了读取流体水位传感器的功能。

xiaoalla的博客 739

保姆级教程:用STM32CubeMX HAL库搞定ESP8266连接,附串口printf调试全流程

本文提供了一份详细的STM32CubeMX HAL库教程,指导开发者如何实现ESP8266无线模块的连接与调试。从开发环境搭建、串口配置到AT指令通信解析,涵盖了物联网开发中的关键步骤和常见问题解决方案,帮助开发者快速掌握STM32与ESP8266的集成技术。

weixin_28273593的博客 503

C# 实现DES加密解密(详解附源码)

DES算法是一种最通用的对称密钥算法,因为算法本身是公开的,所以其安全性在于密钥的安全性。基于密钥的算法通常有两类:对称算法和公开密钥算法。对称算法的对称性体现在加密密钥能够从解密密钥推算出来,反之亦然。在大多数对称算法中,加解密的密钥是相同的,DES就是这样。可见,对称密钥算法的加解密密钥都是保密的。而公开密钥算法的加密密钥是公开的,解密密钥是保密的。 DES 加密算法的整体流程图如图1-6。...

qq_38146797的博客 5356

ORB-SLAM3单目+IMU实战:从数据加载到位姿优化的完整流程解析

本文详细解析了ORB-SLAM3单目+IMU模式的完整实战流程。从EuRoC等数据集的数据格式准备、系统启动与数据流入口,到帧构建、IMU预积分、视觉-惯性联合初始化,再到基于运动模型的跟踪、局部地图优化及多线程协同,提供了从环境配置到代码解读的全面指南,并分享了参数调优与性能分析的实用调试经验。

weixin_29085151的博客 296

Java实现DES对称加密算法(附Android下3DES的JNI源码)

Java实现DES对称加密算法     Sun公司在Java Platform Standard Ed.6中引入了javax.crypto软件包,javax.crypto软件包为加密操作提供类和接口。在此包中定义的加密操作包括加密、密钥生成和密钥协商,以及消息验证码(Message Authentication Code,MAC)生成。 加密支持包括对称密码、非对称密码、块密码和流密码。此包还支

WTBEE的专栏 5715

【PLC】三菱plc控件安装 component Movedata had the following error ... Error Number:-119

Windows 10 专业版/企业版本版本号:22H2操作系统内部版本:19045.3448。

少莫千华 8001

高通8155车机系统里,安卓和QNX是怎么‘打电话’的?聊聊HAB通信框架那些事

本文深入解析了高通8155车机系统中HAB通信框架如何实现安卓与QNX的高效协同。作为异构系统的通信桥梁,HAB通过共享内存和中断信号机制,在多媒体数据传输中展现出零拷贝、硬件加速等优势,成为智能座舱实现实时性与生态丰富性平衡的关键技术。

weixin_42715608的博客 381

DES算法实现(C++版)

一、DES算法原理 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、DES算法原理系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

无知亦乐 1万+

IFIX往Mysql数据库同步数据方法

通过IFix数据库向Mysql数据库同步数据

仙人掌 1595

2、DES算法

DES算法 算法流程--加密的详细位数变化 算法的特点及现状 3DES加密算法

安全学习笔记 2万+

AI挖矿技术全景解析:从智能勘探到自主开采的2025年度技术演进与产业变革

随着全球关键矿产资源需求激增与开采难度加剧,人工智能(AI)技术正在重塑矿业全生命周期。本文系统综述了2025年AI挖矿技术的最新进展,涵盖从地质勘探、资源评估到自主开采、安全监控的完整技术链条。基于Elsevier 2025年发表的最新研究成果及IEEE会议前沿动态,本文深入分析了深度学习、强化学习、计算机视觉等核心技术在矿物识别、品位预测、设备维护等场景的应用机制。研究数据显示,AI技术已使勘探成功率提升45%,设备停机时间减少35%,整体运营效率提高40%以上。

nmdbbzcl的博客 2082

YOLOv8全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 514

python实现DES算法

DES 算法是由美国 IBM 公司在 20 世纪 70 年代提出,并被美国政府、美国国家标准局和美国国家标准协会采纳和承认的一种标准加密算法。它属于分组加密算法,即在明文加密和密文解密过程中,信息都是按照固定长度分组后进行处理的。混淆和扩散是它采用的两个最重要的安全特性。

入梦风行的博客 6407

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.

LuckyDog0623的博客 9891

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,用来隐藏明文的统计特性和结构规律...

敲代码的乔帮主 7653

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: csv格式读取通用类
下一篇: MD5转化通用类
VirusFu
博客等级 码龄21年 51粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值