import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DESEncryptUtil {
private static final String PASSWORD_CRYPT_KEY = "_yeyo@z&$975@ga(";
private final static String DES = "DES";
/**
*
* 加密
*
* @param src
* 数据源
*
* @param key
* 密钥,长度必须是8的倍数
*
* @return 返回加密后的数据
*
* @throws Exception
*/
public static byte[] encrypt(byte[] src,byte[] key )throws Exception{
// DES算法要求有一个可信任的随机数源
SecureRandom sr=new SecureRandom();
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks=new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(DES);
SecretKey secretKey=keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher=Cipher.getInstance(DES);
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, secretKey ,sr);
// 现在,获取数据并加密
// 正式执行加密操作
return cipher.doFinal(src);
}
/**
*
* 解密
*
* @param src
* 数据源
*
* @param key
* 密钥,长度必须是8的倍数
*
* @return 返回解密后的原始数据
*
* @throws Exception
*/
public static byte[] decrypt(byte[] src , byte[] key)throws Exception{
//des算法要求有一个可信任的随机源
SecureRandom sr=new SecureRandom();
//从原始密钥创建一个DESKeySpec对象
DESKeySpec dks=new DESKeySpec(key);
//创建一个密钥工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(DES);
SecretKey secretKey=keyFactory.generateSecret(dks);
//cipher实现完成解密操作
Cipher cipher=Cipher.getInstance(DES);
//用密钥初始化cipher对象
cipher.init(Cipher.DECRYPT_MODE,secretKey,sr);
// 现在,获取数据并加密
// 正式执行解密操作
return cipher.doFinal(src);
}
/**
*
* 密码加密
*
* @param data
*
* @return
*
* @throws Exception
*/
public final static String encrypt(String password){
try {
return byte2hex(encrypt(password.getBytes("UTF-8"),
PASSWORD_CRYPT_KEY.getBytes("UTF-8")));
} catch (Exception e) {
}
return null;
}
/**
*
* 密码解密
*
* @param data
*
* @return
*
* @throws Exception
*/
public final static String decrypt(String data) {
try {
return new String(decrypt(hex2byte(data.getBytes("UTF-8")),
PASSWORD_CRYPT_KEY.getBytes("UTF-8")));
} catch (Exception e) {
}
return null;
}
/**
*
* 二行制转字符串
*
* @param b
*
* @return
*/
public static String byte2hex(byte[] b){
String hs="";
String stmp="";
for(int i=0;i<b.length;i++){
stmp=java.lang.Integer.toHexString(b[i] & 0XFF);
if(stmp.length() == 1)
hs=hs+"0"+stmp;
else
hs=hs+stmp;
}
return hs.toUpperCase();
}
public static byte[] hex2byte(byte[] b){
if((b.length % 2) !=0)
throw new IllegalArgumentException("长度不是偶数");
byte[] b2=new byte[b.length /2];
for(int i=0;i<b.length;i+=2){
String item=new String(b,i,2);
b2[i/2]=(byte) Integer.parseInt(item, 16);
}
return b2;
}
}
分享到:
相关推荐
DES 算法加密算法解密算法 DES 算法概述 DES(Data Encryption Standard)是一种对称密钥块加密算法,由美国 IBM 公司的 W. Tuchman 和 C. Meyer 于 1971-1972 年研制成功。1973 年,美国国家标准局(NBS)公开...
在这篇文章中,我们将讨论如何使用 Matlab 实现 DES 加密算法。DES 算法是美国数据加密标准,是一种对称密码体制加密算法。其密钥长度为 56 位,明文按 64 位进行分组,将分组后的明文组和 56 位的密钥按位替代或...
### DES算法实验报告知识点 #### 实验目的 本次实验旨在通过编写DES算法代码,深入了解分组密码算法的设计理念及其工作模式。DES(Data Encryption Standard,数据加密标准)是一种广泛使用的对称加密算法,由IBM...
基于给定文件的信息,我们将详细阐述DES算法的背景、设计理念、应用场景以及它在解决特定问题方面的优势。同时,我们将基于已有的描述,尝试复原文章中可能提到的DES算法的具体过程,并给出相关的伪代码描述。 ### ...
在本项目中,"信息安全DES算法带界面实现"是一个实验性质的程序,它提供了用户友好的图形界面,使得用户可以直观地进行DES算法的操作,并进行不同进制之间的转换。 DES算法由IBM公司于1970年代初期设计,1977年被...
本文档描述了DES算法和3DES算法加、解密流程和补位数据规则,供理解学习DES算法和3DES算法。供密码开发相关人员了解最简单的密码算法入门学习使用。
DES是一种对称加密算法,使用56位的密钥对数据进行加密,而3DES是通过三次应用DES算法来提高其安全性,从而提供更强大的加密强度,其密钥长度达到了168位。 在C++中实现3DES算法通常涉及以下几个关键步骤: 1. **...
基于Java实现的DES算法 作为一个IT行业大师,我将从给定的文件中生成相关知识点。 标题:基于Java实现的DES算法 在这个标题中,我们可以看到这个Java程序的主要功能是实现DES(Data Encryption Standard)算法。...
RSA 算法与 DES 算法的实现 RSA 算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对 RSA 密钥,其中之一是保密密钥,由用户保存;...
### DES算法在MATLAB中的实现 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种对称密钥算法,用于保护敏感数据的安全传输。它最初由IBM开发,并于1977年被美国国家标准局采纳为官方标准。...
本文将详细介绍DES算法的原理以及如何使用C++进行实现,并结合提供的"TestForm"测试类来探讨其实用性。 DES算法基于Feistel结构,由IBM在1970年代初期开发,后来被美国国家标准局(NIST)采纳为数据加密标准。它...
DES算法基于块密码的设计原理,采用64位的数据块和56位的密钥进行操作,通过一系列复杂的数学运算,将明文转换为密文,以保护数据的安全。 描述中的"只有300行的代码"表明这是一个简化的DES算法实现,对于初学者来...
C语言实现DES算法DES加密算法实验报告.doc
DES算法原理与实现,DES算法原理与实现DES算法原理与实现DES算法原理与c实现
DES算法的主要流程包括初始置换(IP)、16轮迭代运算和逆初始置换(IP-1)。 初始置换(IP)的作用是将64位的明文按照特定规则重新排列,分为L0和R0两部分,每部分32位。IP置换规则是将原始64位数据重新排序,例如...
在C语言中实现DES算法,主要涉及以下几个核心知识点: 1. **密钥扩展**:DES的56位密钥在实际使用中会被扩展成64位,并通过一系列置换和循环移位操作,形成16个子密钥,每个子密钥48位。这个过程称为密钥扩展,包含...
基于 C++ 的 DES 算法实现 摘要:本文主要研究了基于 C++ 的 DES 算法实现,旨在解决当前网络环境中的数据加密问题。通过对 DES 算法的原理、优缺点的分析,并编写了 C++ 源代码,实现了数据的加密。研究结果表明,...
在C语言中实现DES算法,可以帮助理解其工作原理,并且为实际项目开发提供基础。 DES算法的核心是Feistel结构,它将原始数据分为左右两半,通过迭代16轮的加密过程,每轮都包含一系列的置换和异或操作。这些操作包括...
"DES算法及流程图" DES(Data Encryption Standard)算法是美国IBM公司研制的一种对称加密算法,具有较高的安全性。它是一种迭代分组密码算法,使用最为广泛的加密算法之一。下面对DES算法的基本组成和流程图进行...
"DES 算法课程设计" 在信息安全工程中,DES(Data Encryption Standard)算法是一种对称加密算法,用于保护数据免受未经授权的访问。该算法的设计主要是为了提供一种安全的加密方法,以保护敏感信息免受未经授权的...