内容简介:说明:上篇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为例。
一、什么是对称算法
对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。加密与解密互逆,在大多数对称算法中,加密解密密钥是相同的。
:进行安全通信前需要以安全方式进行密钥交换,安全得不到有效保证,规模旁杂。
二、密钥的机制
DES密钥初始化的长度是64位,而实际可用的位置是56位,因为DES算法规定,第8、16、……64位是奇偶校验位,不参与DES运算。 1、初始序化Key的长度
图 3
然后去掉最后一位,可以发现前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类似。
持续更新中,可以关注........
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Spring解密 - 默认标签的解析
- Spring解密 - 自定义标签与解析
- Spring解密 - XML解析 与 Bean注册
- APICloud解密本地资源到逆向APP算法到通用资源解密
- NodeJS加密解密,node-rsa加密解密用法
- CMSEasy企业建站源代码解密工具,适用于纯本地解密机制!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTTP Essentials
Stephen A. Thomas、Stephen Thomas / Wiley / 2001-03-08 / USD 34.99
The first complete reference guide to the essential Web protocol As applications and services converge and Web technologies not only assume HTTP but require developers to manipulate it, it is be......一起来看看 《HTTP Essentials》 这本书的介绍吧!