1、DES算法:
/**
* 加解密算法
* @param data 加解密数据
* @param key 秘钥
* @param mode 模式
* @return 加解密结果
*/
public static byte[] desCryt(byte[] data, byte[] key, int mode){
byte[] result = null ;
try {
SecureRandom sr = new SecureRandom();
SecretKeyFactory keyFactory;
DESKeySpec dks = new DESKeySpec(key);
keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretkey = keyFactory.generateSecret(dks);
//创建Cipher对象
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
//初始化Cipher对象
cipher.init(mode, secretkey, sr);
//加解密
result = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return result;
}
2、byte数组转换成16进制字符串
/**
* byte数组转换成16进制字符串
* @param b
* @return
*/
public static String bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
3、16进制字符串转成byte数组
/**
* 16进制字符串转成byte数组
* @param src
* @return
*/
public static byte[] hexString2Bytes(String src){
byte[] ret = new byte[8];
byte[] tmp = src.getBytes();
for(int i=0; i<8; i++){
ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
}
return ret;
}
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
_b0 = (byte)(_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
byte ret = (byte)(_b0 ^ _b1);
return ret;
}
执行
public static void main(String[] args) {
//加解密模式
int mode = Cipher.ENCRYPT_MODE;
//被加解密byte数组16进制字符串
String dataHexString = "1234567887654321";
//秘钥byte数组16进制字符串
String keyHexString = "9AAB1D2EE004AAC3";
byte[] data = hexString2Bytes(dataHexString);
byte[] key = hexString2Bytes(keyHexString);
byte[] result = desCryt(data, key, mode);
//打印结果
System.out.println("结果:"+bytes2HexString(result));
}
结果:7D592BF239849E76
执行
public static void main(String[] args) {
//加解密模式
int mode = Cipher.DECRYPT_MODE;
//被加解密byte数组16进制字符串
String dataHexString = "7D592BF239849E76";
//秘钥byte数组16进制字符串
String keyHexString = "9AAB1D2EE004AAC3";
byte[] data = hexString2Bytes(dataHexString);
byte[] key = hexString2Bytes(keyHexString);
byte[] result = desCryt(data, key, mode);
//打印结果
System.out.println("结果:"+bytes2HexString(result));
}
结果:1234567887654321
PS:
获取Cipher对象的时候一定要写成
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
不要写成
Cipher cipher = Cipher.getInstance("DES");
否则解密的时候会报错:
Given final block not properly padded
原因是Cipher cipher = Cipher.getInstance("DES");与Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");等同,填充方式错误,加密的时候会得到16长度的字节数组。
JCE详解传送门:http://docs.oracle.com/javase/1.5.0/docs/guide/security/jce/JCERefGuide.html
附件是DES算法原理说明
分享到:
相关推荐
2. Java语言可以用来实现DES算法,通过使用Java的输入/输出流和字符串操作来实现加密和解密。 3. 读取文件的函数可以使用Java的FileInputStream和InputStreamReader来实现。 4. 初始化函数可以使用固定的数组来初始...
在Java中实现DES算法,主要涉及到`java.security`和`javax.crypto`这两个包。首先,我们需要创建一个`SecretKey`对象,这个对象包含了用于加密和解密的密钥。DES密钥长度固定为64位,但实际有效位只有56位,因为每8...
JAVA语言编写的DES算法,自己做毕设用到的
本文章详细介绍了一种利用Java语言实现的DES(Data Encryption Standard,数据加密标准)算法。DES是一种广泛使用的对称加密算法,主要用于保护敏感信息的安全传输。通过该Java实现,用户可以更好地理解DES的工作...
本程序是java语言实现的DES加密算法的实例。
在Java和C等编程语言中,DES算法被广泛用于数据的安全传输和存储。本篇将详细介绍Java JDK内置的DES算法以及如何用C语言实现它。 首先,DES算法基于Feistel结构,使用64位的数据块进行加密,其中包含56位的有效密钥...
2. **Java实现DES**:掌握如何使用Java语言中的`javax.crypto`包来实现DES算法,包括密钥生成、加密、解密过程。 3. **代码分析**:深入剖析给定代码片段,理解其逻辑结构、异常处理机制以及与DES加密解密相关的关键...
标签中的"des___java des_java des___java des java_des"进一步强调了这个项目与Java语言以及DES加密算法的关系。 压缩包内的"DES"可能包含以下内容: 1. 加密类:实现DES加密的核心代码,可能名为`DESUtil.java`,...
Java编程语言也提供了实现DES算法的API,使得开发者能够在Java环境中进行数据加密和解密操作。下面将详细介绍DES算法以及如何在Java中使用它。 DES算法起源于1970年代,由IBM开发并被美国国家标准局(NIST)采纳为...
标题中的"delphi,java des算法通用加解密源码"指的是使用DES(Data Encryption Standard)算法实现的加密和解密功能,适用于两种不同的编程语言:Delphi和Java。DES是一种广泛使用的对称加密算法,它基于块密码设计...
本项目采用Java语言从底层实现DES加密,不依赖于Java内置的加密库,旨在深入理解加密原理并提升编程能力。以下是关于DES加密算法以及Java实现的相关知识点: 1. **DES算法概述** DES是一种块加密算法,它使用56位...
在本实验中,我们将关注如何用JAVA语言实现DES算法。 首先,DES算法主要包括三个主要步骤:初始置换、密钥扩展和迭代加密。初始置换是将64位明文数据进行重新排列,以便在后续步骤中更好地进行操作。密钥扩展则是将...
RSA 算法与 DES 算法的实现 RSA 算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。...它们的实现可以使用 C/C++、Java 等语言进行编程。
DES算法在1970年代由IBM开发,并在1977年被美国国家标准局(NIST)采纳为标准。尽管现在DES由于其相对较短的56位密钥长度已被认为不够安全,但作为加密技术的基础,它仍然是理解和学习加密原理的重要部分。 标题...
2. 统计DES算法在密钥固定情况,输入明文改变1位、2位,。。。64位时。输出密文位数改变情况。 3. 统计DES算法在明文固定情况,输入密钥改变1位、2位,。。。64位时。输出密文位数改变情况。 为了具有客观性,2,3...
S-DES(Simple DES,简单DES)是一种简化版的数据加密标准(DES),它主要用于教学目的,帮助理解DES算法的工作原理。DES是1970年代由IBM开发,并在1977年由美国国家标准局(NIST)采纳为数据加密标准。S-DES保留了...
Java作为一种跨平台的编程语言,在开发过程中其源代码的安全性尤为关键。本文将探讨如何通过使用DES(Data Encryption Standard)加密算法来加强对Java源代码的保护。 #### 二、Java源代码需要加密的原因 1. **...
通过使用Java语言实现DES加密算法,不仅可以帮助我们深入理解加密机制,还能为实际应用提供一种可行的解决方案。 #### 二、DES概述 DES最初是由IBM公司开发的Lucifer算法演变而来。1973年,美国国家标准局(NBS,...
des 算法介绍Python-Java-go相关语言的实现代码样例,des算法,DES 是一种对称密钥加密块密码算法,由 IBM 开发并在 1977 年被美国联邦政府的国家标准局(NIST)采纳为联邦信息处理标准(FIPS),随后被国际标准化...