关于DES加密、解密之类在JE中也有挺多的例子,也不确定这算不算原创。欢迎学习、感谢拍砖指导!
/**
* Created by IntelliJ IDEA.
* User: liangj
*/
public class DesKeyManager {
public final static String DEFAULT_KEY = "PKCS5Padding";
protected final static String DES = "DES";
protected static String key;
protected String getKey() {
return key;
}
public static void setKey(String key) {
DesKeyManager.key = key;
}
}
import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKeyFactory;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import java.security.SecureRandom;
/**
* Created by IntelliJ IDEA.
* User: liangj
*/
public class DesEncrypt extends DesKeyManager {
private static DesEncrypt _instance = null;
private DesEncrypt() {
}
public static DesEncrypt getInstance() {
if (_instance == null) {
_instance = new DesEncrypt();
}
return _instance;
}
/**
* 加密
* @param key 密匙,其长度必须是8的倍数
* @param src 数据源
* @return 返回加密后的数据
* @throws Exception
*/
private byte[] encrypt(byte[] key, byte[] src) throws Exception {
//DES算法需要有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
//从原始密匙数据(key)创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
//创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
//使用密匙工厂把DESKeySpec转换成一个SecretKey对象
SecretKey sk = keyFactory.generateSecret(dks);
//Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(DES);
//用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, sk, sr);
//现在开始对数据源src进行加密
return cipher.doFinal(src);
}
/**
* 二进制转换成十六进制
* @param b
* @return
*/
public String byte2hex(byte[] b) {
String hs = "";
String stmp;
for (byte aB : b) {
stmp = (Integer.toHexString(aB & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toLowerCase();
}
/**
* 加密方法
* @param src 数据源
* @return
*/
public String encrypt(String src) {
try {
return byte2hex(encrypt(getKey().getBytes(), src.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String encrypt(byte[] src) {
try {
return byte2hex(encrypt(getKey().getBytes(), src));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKeyFactory;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import java.security.SecureRandom;
/**
* Created by IntelliJ IDEA.
* User: liangj
*/
public class DesDecrypt extends DesKeyManager {
private static DesDecrypt _instance = null;
private DesDecrypt() {
}
public static DesDecrypt getInstance() {
if (_instance == null) {
_instance = new DesDecrypt();
}
return _instance;
}
/**
* 解密
* @param key 密匙,其长度必须是8的倍数
* @param src 经过DES加密的数据源
* @return 返回解密后的数据
* @throws Exception
*/
private byte[] decrypt(byte[] key, byte[] src) throws Exception {
//需要创建一个可信任的随机数源对象
SecureRandom sr = new SecureRandom();
//从原始密匙数据(src)创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
//创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
//使用密匙工厂把DESKeySpec转换成SecretKey对象
SecretKey sk = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(DES);
//用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, sk, sr);
//现在开始对数据源src进行解密
return cipher.doFinal(src);
}
/**
* 十六进制转换成二进制
* @param b
* @return
*/
public byte[] hex2byte(byte[] b) {
if ((b.length % 2) != 0) {
throw new IllegalArgumentException("长度不是偶数");
}
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
/**
* 解密方法
* @param src 数据源
* @return
*/
public byte[] decrypt(String src) {
try {
return decrypt(getKey().getBytes(), hex2byte(src.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public byte[] decrypt(byte[] src) {
try {
return decrypt(getKey().getBytes(), hex2byte(src));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
分享到:
相关推荐
标题"cryptopp的DES加密解密"指出我们将讨论的是使用Cryptopp库进行DES(Data Encryption Standard)加密与解密的方法。Cryptopp是一个强大的、免费的C++类库,提供了多种密码学算法,包括DES,用于数据的安全传输和...
des加密解密及md5加密.例子及应用!!!
在这个"VC下DES加密解密程序"中,我们将会探讨如何在Visual C++环境下实现DES算法。 首先,DES加密算法基于64位的数据块进行操作,但实际有效的密钥长度只有56位,因为有8位用于奇偶校验和设计上的特殊用途。DES...
以下是关于3DES加密解密算法在Java中的实现细节: 首先,为了使用3DES,Java程序需要引入特定的JAR包,这些包通常位于`JAVA_HOME/jre/lib/`目录下,包括`jce.jar`、`US_export_policy.jar`、`local_policy.jar`以及...
java版Des加密解密源码 DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件...
标题中的“Delphi7与C#实现Des加解密互通Demo”指的是一个示例项目,该项目旨在演示如何在Delphi 7和C#之间进行DES加密和解密操作,确保两个环境下的数据一致性。全网找遍只此一份,表明这个示例可能比较罕见且具有...
本篇文章将深入探讨C#中实现3DES加密解密的方法。 3DES的工作原理是通过三次应用DES算法来提高安全性。它将明文分成64位的数据块,然后用三个不同的密钥进行三次独立的DES加密过程:一次加密、一次解密、再一次加密...
根据提供的文件信息,我们可以从中提炼出两个主要的知识点:一是关于DES加密解密技术的应用;二是关于WPF中实现转圈圈动画的方法。下面将分别对这两个知识点进行详细阐述。 ### DES加密解密 #### 1. DES简介 数据...
des加密解密的C++实现,该资源提供了完整的例子,调用方便,开发产品时直接参考试用即可
- C#提供了一套完整的加密API,位于`System.Security.Cryptography`命名空间下,包括DES类,用于实现DES加密和解密。 3. **创建DES对象**: - 使用`new DESCryptoServiceProvider()`来创建一个DES加密服务提供者...
下面将详细介绍DES加密解密的基本原理、JS实现以及使用时需要注意的事项。 一、DES算法简介 DES算法由IBM公司于1970年代提出,最初是为美国政府设计的标准加密算法。它基于Feistel网络结构,通过16轮迭代过程,将64...
以下是一个DES加密和解密的例子: ```csharp using System; using System.IO; using System.Text; using System.Security.Cryptography; public class DESExample { public static void EncryptFile(string input...
总的来说,通过Java实现3DES加密解密,我们需要理解加密算法的基本原理,熟悉Java的相关加密库,并掌握如何生成和使用密钥。在实际开发中,确保数据的安全性至关重要,因此正确地使用加密技术是每个IT专业人员必备的...
本Java实现的DES加密解密源码提供了一个可运行的例子,这对于理解和学习DES的工作原理非常有帮助。源码中的注释清晰,使得开发者能够快速了解每一步操作的含义。 DES加密过程主要包括以下几个步骤: 1. **Key ...
本实例将探讨如何使用JavaScript实现DES加密解密功能。 首先,我们需要理解DES的基本原理。DES是一种分组密码,它将明文数据分成64位的数据块,然后用64位的密钥对每个数据块进行加密。实际的DES算法中,有56位是...
接下来,我们探讨DES加密解密。DES是一种古老的块密码算法,标准块大小为64位,有效密钥长度为56位。在PHP中,可以使用`mcrypt`扩展来实现DES加密和解密。这个示例中定义了一个名为`DES`的类,包含了`encrypt`和`...
在C#中实现DES加密解密,你需要使用`System.Security.Cryptography`命名空间中的`DESCryptoServiceProvider`类。以下是一个简单的示例: ```csharp using System; using System.IO; using System.Security....
在Java中实现3DES加密解密,需要使用`javax.crypto`包中的`Cipher`类。以下是一个简单的3DES加密解密Java示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto....
本篇将深入探讨"C# winform DES加密解密"这一主题,帮助你理解如何在Windows Forms应用程序中实现数据的加密和解密。 DES(Data Encryption Standard)是一种经典的对称加密算法,它使用56位的密钥对数据进行加密和...
在**MFC(Microsoft Foundation Classes)**框架下编写DES加密解密程序,可以利用MFC提供的类库和事件处理机制,简化Windows应用程序的开发。MFC是一个C++类库,它将Windows API封装成易于使用的对象,帮助开发者...