`
lhc1986
  • 浏览: 161834 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论
阅读更多

1、DES算法:

 

 

	/**
	 * 加解密算法
	 * @param data  加解密数据
	 * @param key   秘钥
	 * @param mode  模式
	 * @return      加解密结果
	 */
	public static byte[] desCryt(byte[] data, byte[] key, int mode){
		byte[] result = null ;
		try {
			SecureRandom sr = new SecureRandom();  
			SecretKeyFactory keyFactory;
			DESKeySpec dks = new DESKeySpec(key);
			keyFactory = SecretKeyFactory.getInstance("DES");
			SecretKey secretkey = keyFactory.generateSecret(dks); 
			//创建Cipher对象
			Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");  
			//初始化Cipher对象  
			cipher.init(mode, secretkey, sr);  
			//加解密
			result = cipher.doFinal(data); 
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (InvalidKeySpecException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			e.printStackTrace();
		} catch (BadPaddingException e) {
			e.printStackTrace();
		} 
		
		return result;
	}

 

 2、byte数组转换成16进制字符串

 

 

 

	 /**
	  * byte数组转换成16进制字符串
	 * @param b
	 * @return
	 */
	public static String bytes2HexString(byte[] b) {
		    String ret = "";
		    for (int i = 0; i < b.length; i++) {
		      String hex = Integer.toHexString(b[i] & 0xFF);
		      if (hex.length() == 1) {
		        hex = '0' + hex;
		      }
		      ret += hex.toUpperCase();
		    }
		    return ret;
	}

 

 

3、16进制字符串转成byte数组

 

 

	 /**
	  * 16进制字符串转成byte数组
	 * @param src
	 * @return
	 */
	public static byte[] hexString2Bytes(String src){
		    byte[] ret = new byte[8];
		    byte[] tmp = src.getBytes();
		    for(int i=0; i<8; i++){
		      ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
		    }
		    return ret;
	 }

 

 

 

	 public static byte uniteBytes(byte src0, byte src1) {
		    byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
		    _b0 = (byte)(_b0 << 4);
		    byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
		    byte ret = (byte)(_b0 ^ _b1);
		    return ret;
	}

 

 

 

执行

 

 

	public static void main(String[] args) {
		//加解密模式
		int mode = Cipher.ENCRYPT_MODE;
		//被加解密byte数组16进制字符串
		String dataHexString = "1234567887654321";
		//秘钥byte数组16进制字符串
		String keyHexString = "9AAB1D2EE004AAC3";
		byte[] data = hexString2Bytes(dataHexString);
		byte[] key = hexString2Bytes(keyHexString);
		byte[] result = desCryt(data, key, mode);
		//打印结果
		System.out.println("结果:"+bytes2HexString(result));
	}

 

 结果:7D592BF239849E76

 

执行

 

 

	public static void main(String[] args) {
		//加解密模式
		int mode = Cipher.DECRYPT_MODE;
		//被加解密byte数组16进制字符串
		String dataHexString = "7D592BF239849E76";
		//秘钥byte数组16进制字符串
		String keyHexString = "9AAB1D2EE004AAC3";
		byte[] data = hexString2Bytes(dataHexString);
		byte[] key = hexString2Bytes(keyHexString);
		byte[] result = desCryt(data, key, mode);
		//打印结果
		System.out.println("结果:"+bytes2HexString(result));
	}

 

 结果:1234567887654321

 

 

PS:

获取Cipher对象的时候一定要写成

Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");

不要写成

Cipher cipher = Cipher.getInstance("DES");

否则解密的时候会报错:

Given final block not properly padded


原因是Cipher cipher = Cipher.getInstance("DES");与Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");等同,填充方式错误,加密的时候会得到16长度的字节数组。

 

JCE详解传送门:http://docs.oracle.com/javase/1.5.0/docs/guide/security/jce/JCERefGuide.html

 

附件是DES算法原理说明

分享到:
评论

相关推荐

    基于java实现的des算法

    2. Java语言可以用来实现DES算法,通过使用Java的输入/输出流和字符串操作来实现加密和解密。 3. 读取文件的函数可以使用Java的FileInputStream和InputStreamReader来实现。 4. 初始化函数可以使用固定的数组来初始...

    DES算法Java实现

    在Java中实现DES算法,主要涉及到`java.security`和`javax.crypto`这两个包。首先,我们需要创建一个`SecretKey`对象,这个对象包含了用于加密和解密的密钥。DES密钥长度固定为64位,但实际有效位只有56位,因为每8...

    DES加密算法 JAVA语言

    JAVA语言编写的DES算法,自己做毕设用到的

    DES算法java实现

    本文章详细介绍了一种利用Java语言实现的DES(Data Encryption Standard,数据加密标准)算法。DES是一种广泛使用的对称加密算法,主要用于保护敏感信息的安全传输。通过该Java实现,用户可以更好地理解DES的工作...

    用Java实现的DES加密算法

    本程序是java语言实现的DES加密算法的实例。

    java des算法 c 实现

    在Java和C等编程语言中,DES算法被广泛用于数据的安全传输和存储。本篇将详细介绍Java JDK内置的DES算法以及如何用C语言实现它。 首先,DES算法基于Feistel结构,使用64位的数据块进行加密,其中包含56位的有效密钥...

    Java 的DES算法实现

    2. **Java实现DES**:掌握如何使用Java语言中的`javax.crypto`包来实现DES算法,包括密钥生成、加密、解密过程。 3. **代码分析**:深入剖析给定代码片段,理解其逻辑结构、异常处理机制以及与DES加密解密相关的关键...

    DES.rar_DES java_DES JAVA_Des___JAVA_des_java des

    标签中的"des___java des_java des___java des java_des"进一步强调了这个项目与Java语言以及DES加密算法的关系。 压缩包内的"DES"可能包含以下内容: 1. 加密类:实现DES加密的核心代码,可能名为`DESUtil.java`,...

    java编写的DES算法

    Java编程语言也提供了实现DES算法的API,使得开发者能够在Java环境中进行数据加密和解密操作。下面将详细介绍DES算法以及如何在Java中使用它。 DES算法起源于1970年代,由IBM开发并被美国国家标准局(NIST)采纳为...

    delphi,java des算法通用加解密源码

    标题中的"delphi,java des算法通用加解密源码"指的是使用DES(Data Encryption Standard)算法实现的加密和解密功能,适用于两种不同的编程语言:Delphi和Java。DES是一种广泛使用的对称加密算法,它基于块密码设计...

    基于java实现DES算法加密报告相关

    本项目采用Java语言从底层实现DES加密,不依赖于Java内置的加密库,旨在深入理解加密原理并提升编程能力。以下是关于DES加密算法以及Java实现的相关知识点: 1. **DES算法概述** DES是一种块加密算法,它使用56位...

    信息安全实验之DES算法JAVA代码

    在本实验中,我们将关注如何用JAVA语言实现DES算法。 首先,DES算法主要包括三个主要步骤:初始置换、密钥扩展和迭代加密。初始置换是将64位明文数据进行重新排列,以便在后续步骤中更好地进行操作。密钥扩展则是将...

    RSA算法与DES算法的实现

    RSA 算法与 DES 算法的实现 RSA 算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。...它们的实现可以使用 C/C++、Java 等语言进行编程。

    DES加密算法(JAVA和C语言描述)结果一致

    DES算法在1970年代由IBM开发,并在1977年被美国国家标准局(NIST)采纳为标准。尽管现在DES由于其相对较短的56位密钥长度已被认为不够安全,但作为加密技术的基础,它仍然是理解和学习加密原理的重要部分。 标题...

    DES算法实现python(含图形化界面)

    2. 统计DES算法在密钥固定情况,输入明文改变1位、2位,。。。64位时。输出密文位数改变情况。 3. 统计DES算法在明文固定情况,输入密钥改变1位、2位,。。。64位时。输出密文位数改变情况。 为了具有客观性,2,3...

    s-des算法的Java实现和C++实现

    S-DES(Simple DES,简单DES)是一种简化版的数据加密标准(DES),它主要用于教学目的,帮助理解DES算法的工作原理。DES是1970年代由IBM开发,并在1977年由美国国家标准局(NIST)采纳为数据加密标准。S-DES保留了...

    利用DES加密算法保护Java源代码

    Java作为一种跨平台的编程语言,在开发过程中其源代码的安全性尤为关键。本文将探讨如何通过使用DES(Data Encryption Standard)加密算法来加强对Java源代码的保护。 #### 二、Java源代码需要加密的原因 1. **...

    DES加密算法JAVA实现

    通过使用Java语言实现DES加密算法,不仅可以帮助我们深入理解加密机制,还能为实际应用提供一种可行的解决方案。 #### 二、DES概述 DES最初是由IBM公司开发的Lucifer算法演变而来。1973年,美国国家标准局(NBS,...

    des 算法介绍Python-Java-go相关语言的实现代码样例

    des 算法介绍Python-Java-go相关语言的实现代码样例,des算法,DES 是一种对称密钥加密块密码算法,由 IBM 开发并在 1977 年被美国联邦政府的国家标准局(NIST)采纳为联邦信息处理标准(FIPS),随后被国际标准化...

Global site tag (gtag.js) - Google Analytics