Java之DES加解密解析

栏目: 编程工具 · 发布时间: 5年前

内容简介:说明:上篇RSA是一种非对称的加解密算法,今天这种是一种对称的加解密算法DESDES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。Java里封装了很多种对称加密算法的使用,这里以DES为例。对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。加密与解密互逆,在大多数对称算法中,加密解密密钥是相同的。:进行安全通信前需

说明:上篇RSA是一种非对称的加解密算法,今天这种是一种对称的加解密算法DESDES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。Java里封装了很多种对称加密算法的使用,这里以DES为例。

一、什么是对称算法

对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。加密与解密互逆,在大多数对称算法中,加密解密密钥是相同的。

Java之DES加解密解析
图 1 优点 :效率高(加/解密速度能达到数十兆/秒或更多),算法简单,系统开销小,适合加密大量数据。 缺点

:进行安全通信前需要以安全方式进行密钥交换,安全得不到有效保证,规模旁杂。

二、密钥的机制

DES密钥初始化的长度是64位,而实际可用的位置是56位,因为DES算法规定,第8、16、……64位是奇偶校验位,不参与DES运算。 1、初始序化Key的长度

Java之DES加解密解析
图 2 所以这里最好不要去指定长度了,默认的就是56了。 2、如果指定的key超过64位有啥影响
Java之DES加解密解析

图 3

Java之DES加解密解析
图 4 通过上面图3、图4对比可知(加密后序列一样,大家可以直接把生成key序列16进制打出来更直观),初始的key序列超过8字节64位,会自动截取掉,后面多余长度不参与key生成。 3、不同的加密序列加密后结果一样
Java之DES加解密解析
图 5 参考图3、图5将字节数组中的18->19,发现加密后的序列完全一样。啥原因呢?在上面已经提到过,DES实现中第8、16、32... 64位为校验位,相当于只是用每个字节中的前7位进行生成;将18、19转化为二进制为0001001 0 、0001001 1

然后去掉最后一位,可以发现前7位是一样的。所以这样解释了为什么有时候加密序列不同,加密后的内容却是完全一样。

三、完整的DEMO

如果让Base64具有加解密的功能,至少要一部分是变化的;这里可以通过变化标准序列的方式;建议大家用到的时候,可以先看一下第3部分中标出那个类的源码(没几行代码);这个变化的序列可以根据时间、根据UUID、根据一切可以变换的东西来生成,这里是根据UUID来随机生成序列。 1、生成随机序列

package c.d.des;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DesTest {
	Cipher cipher = null;
	public DesTest() {
		init();
	}
	public void init() {
		try {
			KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
			keyGenerator.init(56);
			cipher = Cipher.getInstance("DES");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	// 二进制转换字符串
	public static String bytesToHexString(byte[] src) {
		StringBuilder stringBuilder = new StringBuilder("");
		if (src == null || src.length <= 0) {
			return null;
		}
		for (int i = 0; i < src.length; i++) {
			int v = src[i] & 0xFF;
			String hv = Integer.toHexString(v);
			if (hv.length() < 2) {
				stringBuilder.append(0);
			}
			stringBuilder.append(hv);
		}
		return stringBuilder.toString();
	}
	// 获取Key
	public Key getKey(byte[] passKey) {
		Key convertSecretKey = null;
		try {
			DESKeySpec deSedeKeySpec = new DESKeySpec(passKey);
			SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
			convertSecretKey = factory.generateSecret(deSedeKeySpec);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return convertSecretKey;
	}
	// 加密
	public byte[] encode(byte[] source, Key key) throws Exception {
		cipher.init(Cipher.ENCRYPT_MODE, key);
		byte[] encodeSource = cipher.doFinal(source);
		return encodeSource;
	}
	// 解密
	public String decode(byte[] encodeSource, Key key) throws Exception {
		cipher.init(Cipher.DECRYPT_MODE, key);
		byte[] decodeRes = cipher.doFinal(encodeSource);
		return new String(decodeRes, "UTF-8");
	}
	public static void main(String[] args) throws Exception {
		DesTest dt = new DesTest();
		byte[] passKey = new byte[] {11, 12, 13, 14, 15, 16, 17,18,19,20 };
		System.out.println(passKey.length);
		Key key = dt.getKey(passKey);
		String obj = "就先测试这句吧";
		System.out.println("加密前:" + obj);
		byte[] source = dt.encode(obj.getBytes("UTF-8"), key);
		System.out.println("加密后:" + bytesToHexString(source));
		String res = dt.decode(source, key);
		System.out.println("解密后:" + res);
		String s1 = "0815d22bf5ae0bdd9d37594cedd4be6c1fead86115544517";
		String s2 = "0815d22bf5ae0bdd9d37594cedd4be6c1fead86115544517";
		System.out.println(s1.equals(s2));
	}
}

复制代码

四、后续

既然DES通过暴力一天便可破解,那么3DES如何?大家可以自行研究一下,和DES类似。

持续更新中,可以关注........

Java之DES加解密解析

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

虚拟化与云计算

虚拟化与云计算

《虚拟化与云计算》小组 / 电子工业出版社 / 2009-10 / 45.00元

本书系统阐述了当今信息产业界最受关注的两项新技术——虚拟化与云计算。云计算的目标是将各种IT资源以服务的方式通过互联网交付给用户。计算资源、存储资源、软件开发、系统测试、系统维护和各种丰富的应用服务,都将像水和电一样方便地被使用,并可按量计费。虚拟化实现了IT资源的逻辑抽象和统一表示,在大规模数据中心管理和解决方案交付方面发挥着巨大的作用,是支撑云计算伟大构想的最重要的技术基石。本书以在数据中心采......一起来看看 《虚拟化与云计算》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试