java的3DES加密算法实践
最近开发需要用户JAVA的3DES加密算法,刚开始不是很清楚,找了一些网页,查了一些资料总算写好了,贴出来大家共享一下,可以直接运行的..
package com.zte.cuixudong.desede;
import java.io.IOException;
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 javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Tool {
private static final String Algorithm = "DESede";
private static final String ADD_STRING = "000000000000000000000000";
private static final int KEY_LENGTH = 24;
public static void main(String[] args) {
// 密钥
String key = "1234567890";
// 原文
String src = "abcdef";
System.out.println("原 文:" + src);
Tool tool = new Tool();
// tool.test(src, key);
// 密文
String desString = "";
desString = tool.encryCode(src, key);
System.out.println("加密结果:" + desString);
String newSrc = tool.deCode(desString, key);
System.out.println("解密结果:" + newSrc);
} // keybyte为加密密钥,长度为24字节
public void test(String src, String key) {
// 密钥字节数组
byte[] keybytes = getKeyBytes(key);
// 密钥
SecretKey deskey = getKey(keybytes);
Cipher cipher;
byte[] encbytes;
String str = "";
String newString = "";
try {
System.out.println("----------加密----------");
cipher = Cipher.getInstance(Algorithm);
cipher.init(Cipher.ENCRYPT_MODE, deskey);
encbytes = cipher.doFinal(src.getBytes());
BASE64Encoder baseE = new BASE64Encoder();
str = this.base64Encoder(encbytes);
// str = baseE.encode(encbytes);
System.out.println("密文:" + str);
System.out.println("----------加密----------");
System.out.println("----------解密----------");
encbytes = base64Decoder(str);
BASE64Decoder base64 = new BASE64Decoder();
// encbytes = base64.decodeBuffer(str);
cipher.init(Cipher.DECRYPT_MODE, deskey);
byte[] b = cipher.doFinal(encbytes);
System.out.println("明文:" + new String(b));
System.out.println("----------解密----------");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 加密算法
*
* @param src
* 原文
* @param key
* 密钥
* @return encString 加密后的密文
*/
public String encryCode(String src, String key) {
// 加密
Cipher cipher;
// 密钥字节数组
byte[] keybytes = getKeyBytes(key);
// 密钥
SecretKey deskey = getKey(keybytes);
// 密文数组
byte[] encbytes = new byte[1024];
// 加密后的密文
String encString = "";
try {
cipher = Cipher.getInstance(Algorithm);
cipher.init(Cipher.ENCRYPT_MODE, deskey);
encbytes = cipher.doFinal(src.getBytes());
encString = base64Encoder(encbytes);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return encString;
}
/**
* 解密算法
*
* @param des
* 密文
* @param key
* 密钥
* @return
*/
public String deCode(String des, String key) {
// 加密
Cipher cipher;
// 密钥字节数组
byte[] keybytes = getKeyBytes(key);
// 密钥
SecretKey deskey = getKey(keybytes);
// 解密后的字符串
String desString = "";
byte[] desbytes = new byte[1024];
try {
cipher = Cipher.getInstance(Algorithm);
cipher.init(Cipher.DECRYPT_MODE, deskey);
desbytes = cipher.doFinal(base64Decoder(des));
desString = new String(desbytes);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return desString;
}
// 检查密钥长充,如不足24位,则加零补齐
public byte[] getKeyBytes(String keyString) {
byte[] b = null;
int count = 0;
count = KEY_LENGTH - keyString.length();
keyString += ADD_STRING.subSequence(0, count);
b = keyString.getBytes();
return b;
}
// 获取密钥
public SecretKey getKey(byte[] keyBytes) {
SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm);
return deskey;
}
// base64转码
public String base64Encoder(byte[] b) {
BASE64Encoder base64 = new BASE64Encoder();
String str = base64.encode(b);
return str;
}
// base64解码
public byte[] base64Decoder(String str) {
BASE64Decoder base64 = new BASE64Decoder();
byte[] bytes = new byte[1024];
try {
bytes = base64.decodeBuffer(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bytes;
}
// 检查密钥格式,只能包含"[0-9],[a-z][A-Z]"
public boolean checkKey(String key) {
if (key == null || key.length() == 0 || "".equals(key)) {
return false;
}
return true;
}
}
分享到:
相关推荐
总结来说,理解和正确使用Java中的AES和DES加密算法,需要考虑密钥管理、初始化向量、填充模式、编码以及错误处理等多个方面,同时要关注加密过程中的安全风险和潜在陷阱。在实践中,结合合适的加密库和最佳实践,...
在"DES.rar_DES JAVA_DES algorithm_DES 加密算法_DES加密算法_des ja"这个压缩包中,很可能包含了一个完整的Java实现的DES加密算法示例,包括源代码文件"DES.java",可能用于教学、学习或项目开发,以便开发者能够...
Java中的3DES(Triple Data Encryption Algorithm)是一种强化版的DES(Data Encryption Standard)加密算法,它通过三次应用DES算法来提高安全性。3DES是DES的一个变种,它使用了两个不同的密钥对数据进行三次加密...
### DES加密算法JAVA实现 #### 一、目的与意义 随着信息技术的快速发展,信息安全变得尤为重要。无论是政府机构、企业还是个人用户,都需要确保敏感信息不被未经授权的人访问。在这种背景下,密码学作为保障信息...
本篇文章将深入探讨DES加密算法的应用及其在Java编程中的实现。 DES算法由IBM公司在1970年代初设计,后来被美国国家标准局采纳为数据加密标准。该算法基于Feistel结构,使用64位的密钥对64位的数据进行加密,实际...
DES(Data Encryption Standard)是一种对称加密算法,广泛应用于数据的加密保护。它基于一个64位的密钥,...然而,实际应用中,为了安全性,通常会使用更强大的加密算法如AES,并结合密钥管理和随机数生成等最佳实践。
在学习和实践中,你可以使用各种编程语言实现DES加密算法,例如Java、Python、C++等。这些实现通常包括密钥的生成、数据的加解密以及密钥的管理等功能。在实际应用中,由于DES的安全性问题,通常会采用3DES(Triple ...
Java DES加密是一种在Java编程环境中实现的对称加密算法,主要用来保护数据的安全性。DES(Data Encryption Standard)是早期广泛使用的一种加密标准,虽然现在已经被更安全的AES(Advanced Encryption Standard)所...
Java写的DES的一个类”表明了这个压缩包包含两个部分:一个是使用Delphi编程语言编写的用于执行DES(Data Encryption Standard)加密和解密的小程序,另一个是用Java实现的DES加密类。DES是一种广泛使用的对称加密...
3. **JAVA实现DES加密解密** - **javax.crypto命名包**:JAVA中使用`javax.crypto.Cipher`类配合`DESKeySpec`和`SecretKeyFactory`实现DES加密解密。首先需要创建`DESKeySpec`对象,然后通过`SecretKeyFactory`生成...
这将涉及到对TCP协议的理解,使用socket编程接口,以及在代码中集成DES加密算法的实现。 总结来说,基于DES加密的TCP聊天程序结合了传统的加密技术和网络通信的基本原理,通过学习和实践,不仅可以加深对网络安全和...
1. **DES加密算法**: DES是一种对称加密算法,它使用相同的密钥进行加密和解密。在Java中,可以使用`javax.crypto`包下的`Cipher`类来实现DES加密。首先,需要创建一个DES密钥,然后使用`Cipher`的`init`方法初始...
在“java+3des加密+和字符串转换javalearnsa资料分享”这个主题中,我们聚焦于两个关键知识点:3DES加密算法和字符串转换。 3DES(Triple Data Encryption Standard)是一种对称加密算法,是DES(Data Encryption ...
1. **DES加密算法**: DES是一种分组密码,使用64位的数据块和56位的密钥进行操作。它通过一系列复杂的数学变换,如置换、异或和S盒操作,将明文转化为密文。由于其对称性,加密和解密使用相同的密钥,这使得DES在...
Java中的3DES(Triple Data Encryption Algorithm)是一种对称加密算法,它是基于DES(Data Encryption Standard)的加强版,通过三次迭代提高安全性。在本案例中,我们关注的是使用Java实现3DES加密和解密的源码。...
本教程主要探讨了如何使用Java编程语言实现DES(Data Encryption Standard)、3DES(Triple DES)和AES(Advanced Encryption Standard)这三种常见的对称加密算法,并且详细讲解了五种分组密码的工作模式。...
3DES(Triple Data Encryption Standard),即三重DES加密算法,是对DES(Data Encryption Standard)的一种改进,通过三次迭代加强了加密强度,提供了更高级别的安全性。在这个主题中,我们将深入探讨Java如何实现3...
以下是关于DES加密算法以及Java实现的相关知识点: 1. **DES算法概述** DES是一种块加密算法,它使用56位的密钥对64位的数据块进行加密。由于其固定长度的密钥和数据块,DES在处理大量数据时可能效率较低,且56位...
DES(Data Encryption Standard)是一种经典的对称加密算法,它的全称是数据加密标准。在本文中,我们将深入探讨DES加密的...确保在生产环境中遵循最佳实践,比如使用更强大的加密算法和更长的密钥,以及定期更新密钥。
Java中内置了DES(Data Encryption Standard)、3DES(Triple DES)以及AES(Advanced Encryption Standard)等对称加密算法。 - **DES**:是一种古老的加密算法,使用64位的密钥,但实际有效密钥长度只有56位,...