package com.broadengate.common;
import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;
public class DesUtils {
/** 字符串默认键值 */
private static String strDefaultKey = "national";
/** 加密工具 */
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();
}
/**
* 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)
* 互为可逆的转换过程
*
* @param strIn
* 需要转换的字符串
* @return 转换后的byte数组
* @throws Exception
* 本方法不处理任何异常,所有异常全部抛出
* @author <a href="mailto:leo841001@163.com">LiGuoQing</a>
*/
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
byte[] arrB = strIn.getBytes();
int iLen = arrB.length;
// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] arrOut = new byte[iLen / 2];
for (int i = 0; i < iLen; i = i + 2) {
String strTmp = new String(arrB, i, 2);
arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
}
return arrOut;
}
/**
* 默认构造方法,使用默认密钥
*
* @throws Exception
*/
public DesUtils() throws Exception {
this(strDefaultKey);
}
/**
* 指定密钥构造方法
* @param strKey
* 指定的密钥
* @throws Exception
*/
public DesUtils(String strKey) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
Key key = getKey(strKey.getBytes());
encryptCipher = Cipher.getInstance("DES");
encryptCipher.init(Cipher.ENCRYPT_MODE, key);
decryptCipher = Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE, key);
}
/**
*
* 加密字节数组
* @param arrB
* 需加密的字节数组
* @return 加密后的字节数组
* @throws Exception
*/
public byte[] encrypt(byte[] arrB) throws Exception {
return encryptCipher.doFinal(arrB);
}
/**
* 加密字符串
* @param strIn
* 需加密的字符串
* @return 加密后的字符串
* @throws Exception
*/
public String encrypt(String strIn) throws Exception {
return byteArr2HexStr(encrypt(strIn.getBytes()));
}
/**
* 解密字节数组
* @param arrB
* 需解密的字节数组
* @return 解密后的字节数组
*
* @throws Exception
*/
public byte[] decrypt(byte[] arrB) throws Exception {
return decryptCipher.doFinal(arrB);
}
/**
* 解密字符串
* @param strIn
* 需解密的字符串
* @return 解密后的字符串
* @throws Exception
*/
public String decrypt(String strIn) throws Exception {
return new String(decrypt(hexStr2ByteArr(strIn)));
}
/**
* 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
* @param arrBTmp
* 构成该字符串的字节数组
* @return 生成的密钥
* @throws java.lang.Exception
*/
private Key getKey(byte[] arrBTmp) throws Exception {
// 创建一个空的8位字节数组(默认值为0)
byte[] arrB = new byte[8];
// 将原始字节数组转换为8位
for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
arrB[i] = arrBTmp[i];
}
// 生成密钥
Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
return key;
}
/**
* main方法 。
* @author
* @param args
*/
public static void main(String[] args) {
try {
String test = "sb008";
DesUtils des = new DesUtils("leemenz");// 自定义密钥
System.out.println("加密前的字符:" + test);
System.out.println("加密后的字符:" + des.encrypt(test));
System.out.println("解密后的字符:" + des.decrypt(des.encrypt(test)));
}
catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
总的来说,3DES加密解密工具是一种实用的软件,它利用3DES算法提供强加密功能,适用于保护敏感信息。无论是企业还是个人,都可以利用这样的工具来增加数据的安全性,防止未经授权的访问和窃取。在使用过程中,用户应...
在描述中提到的"DES加密解密工具"是一款专用于执行DES加密和解密操作的应用程序。这款工具的优点在于用户可以本地运行,避免了在线加解密可能带来的密钥泄露风险,确保了数据安全性。用户只需要输入相应的密钥和待...
总结来说,Chilkat 3DES模块是Python开发中一个实用的加密工具,它提供了一种简单易用的方式,帮助开发者在项目中实现3DES加密和解密,从而保护敏感信息的安全。无论是在Web应用、数据库加密,还是在文件保护等领域...
3des加密算法的C语言实现,很好很实用
总的来说,理解和实现3DES加密算法需要对位操作、循环和模式有深入的理解,同时需要关注加密过程中的安全性和效率。C++代码段可以作为一个学习和研究3DES的实用工具,帮助我们更好地理解加密算法的工作原理。
总的来说,这个"des加密实例"是一个实用的工具,对于学习和应用对称加密算法,尤其是DES和3DES,提供了直接的代码参考。用户可以通过这个实例了解对称加密的工作流程,同时在实际项目中快速实现加密功能。在使用时,...
3DES的加密过程是这样的:首先用第一个密钥进行DES加密,然后用第二个密钥进行DES解密,最后再用第三个密钥进行DES加密。这样,即使攻击者知道两个密钥,也无法还原原始明文,因为中间的解密步骤会破坏信息的明文-...
这个"VC 使用DES加密算法的例子代码"是一个实用的示例,它展示了如何在VC++项目中应用DES加密。源码通常包含以下几个关键部分: 1. **DES算法的核心实现**:DES算法基于Feistel网络,包括64位的输入和64位的密钥。...
在C#中,我们可以利用.NET Framework提供的System.Security.Cryptography命名空间中的DESCryptoServiceProvider类来实现DES加密。 以下是使用C#实现DES加密的基本步骤: 1. **创建DES实例**:首先,通过...
标题中的"ios_des加密.zip_iOS的des加密_ios_ios_des_安卓加密"表明我们讨论的是一个关于DES(Data Encryption Standard)加密算法在iOS和Android平台上的实现。DES是一种对称加密算法,广泛用于保护敏感数据,如...
总的来说,这个压缩包提供了一套完整的Java实现的DES加密解密工具,包括核心算法、子密钥生成、文件加密等功能,对于学习DES算法和在Java项目中使用DES加密的开发者来说,是一个非常实用的资源。使用者可以通过阅读...
### DES加密算法的明文与密钥改变情况统计 #### 一、背景介绍 DES(Data Encryption Standard),即数据加密标准,是一种对称加密算法,它最初由IBM开发,并于1977年被美国国家标准局采纳为联邦信息处理标准。DES...
DES加密算法使用了56位的密钥,通过一系列复杂的置换和异或操作对64位的数据块进行加密和解密。虽然DES现在被认为安全性较低,因为其密钥长度较短,容易受到现代计算能力的攻击,但在过去,它曾是广泛应用的加密标准...
本文将深入探讨标题中提及的"RSA加DES加密文件程序源码",以及这两种加密算法的工作原理和应用。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它基于...
总的来说,CBC模式下的DES加密是一种实用的文件保护方法,尤其适用于那些对数据安全性有较高要求的场景。通过深入理解这一技术,我们可以更好地保护敏感信息,防止未经授权的访问和篡改。在实际应用中,除了DES之外...
首先,理解DES加密的核心步骤: 1. **密钥设置**:DES算法使用56位的密钥,但输入的密钥通常是8字节,即64位。这64位中只有56位是真正用于加密的,其余8位作为奇偶校验位,不影响加密过程。 2. **初始置换**:将64位...
这里我们关注的是“RSA结合DES加密解密大数据”的主题。RSA和DES都是常见的加密算法,它们各自具有不同的特点和应用场景,而将两者结合使用则可以充分利用它们的优势,为大数据提供更高级别的安全保障。 RSA...
**DES加密算法** 数据加密标准(DES)是由IBM开发,并在1976年由美国国家标准局采纳的一种对称加密算法。DES使用56位的密钥和一系列复杂的置换和异或操作对64位的数据块进行加密。尽管DES在当时是先进的,但随着...
DES加密算法是一种对称加密算法。DES加密算法是一种对称加密算法。