Java DES字符串加密解密示例
"Java字符串加密解密示例" 在Java编程中,有时我们需要对字符串进行加密和解密操作,以保护敏感信息或确保数据的安全传输。以下是一个简单的示例,展示了如何在Java中使用DES(Data Encryption Standard)算法进行字符串的加密和解密。 首先,我们来看一下提供的代码片段。这段代码创建了一个名为`EncryptionDecryption`的类,该类用于实现加密和解密功能。类中包含两个成员变量:`encryptCipher`和`decryptCipher`,分别用于加密和解密操作。类还提供了一个静态方法`hexStr2ByteArr`,用于将16进制字符串转换为字节数组,以及一个静态方法`byteArr2HexStr`,用于将字节数组转换回16进制字符串。 在主程序中,创建了一个`EncryptionDecryption`对象,并传入一个密钥("tourhb")。然后,对一个字符串("123456789@fdj.com")进行加密和解密。加密后的结果通过`encrypt`方法得到,解密则通过`decrypt`方法完成。 DES是一种块密码,它使用相同的密钥进行加密和解密,密钥长度为64位,但实际有效密钥只有56位。在Java中,我们通常使用`javax.crypto.Cipher`类来进行加密和解密操作。这个类提供了多种加密算法,包括DES。在`EncryptionDecryption`类中,`encryptCipher`和`decryptCipher`是`Cipher`对象,它们分别初始化为加密和解密模式。 在Java中使用DES加密时,需要先将字符串转换为字节数组,然后使用`Cipher`的`init`方法初始化,传入加密或解密模式以及密钥。接下来,调用`doFinal`方法对数据进行加密或解密。解密过程与之类似,只是模式不同。 在示例中,密钥是以字符串形式给出的,但在实际应用中,密钥通常需要更安全地存储和管理,例如使用密钥库(KeyStore)或者密钥生成器(KeyGenerator)。此外,DES由于其56位的密钥长度,现在已经不被认为足够安全,更常见的选择是使用AES(Advanced Encryption Standard),它提供了更强大的安全性,支持128、192和256位的密钥。 总结来说,这个Java代码示例展示了如何使用DES算法对字符串进行加密和解密。在实际开发中,应考虑使用更安全的加密算法,并确保正确管理和存储密钥,以提高数据安全性。同时,对于加密和解密操作,还需要处理可能出现的异常,确保程序的健壮性。
try {
String test = "123456789@fdj.com";
EncryptionDecryption des = new EncryptionDecryption("tourhb");// 自定义密钥
System.out.println("加密前的字符:" + test);
System.out.println("加密后的字符:" + des.encrypt(test));
System.out.println("解密后的字符:" + des.decrypt(des.encrypt(test)));
System.out.println("解密后的字符:"
+ des.decrypt("fe14c7c41f7d2a94b07d7928b21346e7"));
} catch (Exception e) {
e.printStackTrace();
}
下面是加密解密类的源码
import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;
public class EncryptionDecryption {
private static String strDefaultKey = "tourhb";
/** 加密工具 */
private Cipher encryptCipher = null;
private Cipher decryptCipher = null;
/**
* 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]
* hexStr2ByteArr(String strIn) 互为可逆的转换过程
*
* @param arrB
* 需要转换的byte数组
* @return 转换后的字符串
* @throws Exception
*
*/
public static String byteArr2HexStr(byte[] arrB) throws Exception {
int iLen = arrB.length;
// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
StringBuffer sb = new StringBuffer(iLen * 2);
for (int i = 0; i < iLen; i++) {
int intTmp = arrB[i];
// 把负数转换为正数
while (intTmp < 0) {
intTmp = intTmp + 256;
}
// 小于0F的数需要在前面补0
if (intTmp < 16) {
sb.append("0");
}
sb.append(Integer.toString(intTmp, 16));
}
return sb.toString();
剩余6页未读,继续阅读
- 粉丝: 1
- 资源: 19
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦