`

java DES 和3DES加密

    博客分类:
  • java
阅读更多

DES 和 3DES 加解密的使用,加密时,不足8的倍数请补充到8的倍数

 

package com.crypto;

import java.security.spec.KeySpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.DESedeKeySpec;

public class MyDES {

	static String DES = "DES/ECB/NoPadding";
	static String TriDes = "DESede/ECB/NoPadding";

	public static byte[] des_crypt(byte key[], byte data[]) {

		try {
			KeySpec ks = new DESKeySpec(key);
			SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
			SecretKey ky = kf.generateSecret(ks);

			Cipher c = Cipher.getInstance(DES);
			c.init(Cipher.ENCRYPT_MODE, ky);
			return c.doFinal(data);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public static byte[] des_decrypt(byte key[], byte data[]) {

		try {
			KeySpec ks = new DESKeySpec(key);
			SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
			SecretKey ky = kf.generateSecret(ks);

			Cipher c = Cipher.getInstance(DES);
			c.init(Cipher.DECRYPT_MODE, ky);
			return c.doFinal(data);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public static byte[] trides_crypt(byte key[], byte data[]) {
		try {
			byte[] k = new byte[24];

			int len = data.length;
			if(data.length % 8 != 0){
				len = data.length - data.length % 8 + 8;
			}
			byte [] needData = null;
			if(len != 0)
				needData = new byte[len];
			
			for(int i = 0 ; i< len ; i++){
				needData[i] = 0x00;
			}
			
			System.arraycopy(data, 0, needData, 0, data.length);
			
			if (key.length == 16) {
				System.arraycopy(key, 0, k, 0, key.length);
				System.arraycopy(key, 0, k, 16, 8);
			} else {
				System.arraycopy(key, 0, k, 0, 24);
			}

			KeySpec ks = new DESedeKeySpec(k);
			SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede");
			SecretKey ky = kf.generateSecret(ks);

			Cipher c = Cipher.getInstance(TriDes);
			c.init(Cipher.ENCRYPT_MODE, ky);
			return c.doFinal(needData);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	public static byte[] trides_decrypt(byte key[], byte data[]) {
		try {
			byte[] k = new byte[24];

			int len = data.length;
			if(data.length % 8 != 0){
				len = data.length - data.length % 8 + 8;
			}
			byte [] needData = null;
			if(len != 0)
				needData = new byte[len];
			
			for(int i = 0 ; i< len ; i++){
				needData[i] = 0x00;
			}
			
			System.arraycopy(data, 0, needData, 0, data.length);
			
			if (key.length == 16) {
				System.arraycopy(key, 0, k, 0, key.length);
				System.arraycopy(key, 0, k, 16, 8);
			} else {
				System.arraycopy(key, 0, k, 0, 24);
			}
			KeySpec ks = new DESedeKeySpec(k);
			SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede");
			SecretKey ky = kf.generateSecret(ks);

			Cipher c = Cipher.getInstance(TriDes);
			c.init(Cipher.DECRYPT_MODE, ky);
			return c.doFinal(needData);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	public static void main(String[] args) {

		byte k1[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, (byte) 0x88 };
		byte k2[] = { (byte) 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 };
		byte k24[] = new byte[24];
		System.arraycopy(k1, 0, k24, 0, 8);
		System.arraycopy(k2, 0, k24, 8, 8);
		System.arraycopy(k1, 0, k24, 16, 8);

		byte data[] = // 
		hexToBytes("00000000" + "00000000" + "00000000" + "00000000"
				+ "0000c619" + "f4fb7bde" + "51309100" + "00110000"
				+ "00000000" + "00000000" + "00000000" + "00000000"
				+ "00000000" + "00000000" + "00000000" + "00000000"
				+ "00000000" + "00000000" + "00000000" + "00000000"
				+ "00000000" + "00000000" + "00000000" + "00000000"
				+ "00000000" + "00000000" + "00000000" + "00000000"
				+ "00000000" + "00000000" + "00000000" + "00000000");

		// data = new byte[8];
		// byte des_crypt[] = des_crypt(k1, data);
		// byte des_descrypt[] = des_decrypt(k2, des_crypt);
		// byte result[] = des_crypt(k1, des_descrypt);

		byte result[] = trides_crypt(k24, data);
		// byte origin[] = trides_decrypt(k24, result);

		System.out.println("Result = " + result);
	}

	public static byte[] hexToBytes(String str) {
		if (str == null) {
			return null;
		} else if (str.length() < 2) {
			return null;
		} else {
			int len = str.length() / 2;
			byte[] buffer = new byte[len];
			for (int i = 0; i < len; i++) {
				buffer[i] = (byte) Integer.parseInt(str.substring(i * 2,
						i * 2 + 2), 16);
			}
			return buffer;
		}
	}
}

 

分享到:
评论

相关推荐

    3DES加密java实现

    在Java中,我们可以使用`javax.crypto`包中的`Cipher`类来实现3DES加密和解密。首先,我们需要创建一个`SecretKeySpec`对象,用于存储我们的密钥。密钥长度可以是128位(16字节),但3DES实际只使用其中的112位或168...

    Java实现文件的RSA和DES加密

    Java 实现文件的 RSA 和 DES 加密 在现代密码技术中,根据密钥类型的不同,可以将其分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称加密算法用来对敏感数据等信息进行加密,常用的...

    使用java自带des加密算法实现文件加密和字符串加密

    主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下

    3des加密 java

    3des加密 java

    java和javascript之间的DES加密解密

    Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...

    实现使用3des在页面js加密,后台java解密

    本篇将详细介绍如何在网页前端使用JavaScript进行3DES加密,并在后端Java环境中进行解密。 一、3DES加密原理 3DES是DES的加强版,它使用了3个不同的56位密钥,通过3次独立的DES加密过程来提高安全性。具体流程如下...

    Java中3DES加密解密示例(封装byte数组16进制互转)

    Java 中的 3DES 加密解密示例(封装 byte 数组和 16 进制字符串互转) 在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES ...

    Java 3des加密算法ECB模式

    Java 3des加密算法ECB模式,亲测完美通过。目前网上的大部分算法都通不过或者加进Base64之类的,还要不下载其它jar包。而代码使用时直接下载运行,无须配置和下载额外的jar包 ,只需换上自己的密钥和待加密的数据...

    Des.JAVA.rar_DES.java_DES加密_java DES 128bit_java des_加密解密

    3. `FileDES.java`:可能是一个用于对文件进行DES加密和解密的类,它可能封装了对文件流的操作,以便于读取文件,加密后的内容,再写入到新的文件中。 4. `trying1.java`和`trying.java`:可能是实验性的或者测试用...

    DES加密DEMO(C#与JAVA)

    3. **JAVA实现DES加密解密** - **javax.crypto命名包**:JAVA中使用`javax.crypto.Cipher`类配合`DESKeySpec`和`SecretKeyFactory`实现DES加密解密。首先需要创建`DESKeySpec`对象,然后通过`SecretKeyFactory`生成...

    java和C#通用des3加解密

    标题中的“java和C#通用des3加解密”指的是在Java和C#这两种不同的编程语言中实现DES(Data Encryption ...通过理解这些知识点,开发者可以在Java和C#之间实现3DES的兼容加密,确保数据在不同系统间的无缝安全交换。

    JAVA_DES3加密算法.doc

    在给定的代码中,展示了如何在Java中实现3DES加密和解密的过程。 首先,3DES加密过程通常包括以下步骤: 1. **生成密钥**:在Java中,密钥通常通过`KeyGenerator`类生成。在提供的代码中,密钥是通过`getKey()`...

    用java实现des加密

    总之,Java DES加密是一个涉及密钥生成、加密过程和解密过程的技术,虽然DES本身在安全性上已经相对较弱,但理解其工作原理和实现方法对于学习加密技术仍然是有价值的。在实际应用中,应优先考虑使用更安全的加密...

    java 加密(3DES和交换)

    3DES的基本流程是:数据先经过一次DES加密,然后解密,再加密,这样就使用了三个不同的密钥,增强了密码的复杂性和安全性。在Java中,我们可以使用`javax.crypto.Cipher`类以及`java.security.Key`接口来实现3DES的...

    js&java DES加密互通

    通过以上介绍,我们理解了DES加密算法的基本原理,并学习了在JavaScript和Java中如何实现DES加密。在实际开发中,根据项目需求,还可以考虑使用更安全的AES加密算法或者其他对称加密方法,但其核心原理和互通实现...

    JAVA实现DES加密

    在提供的`DESUtil.java`文件中,可能包含了实现DES加密和解密功能的类。这个类通常会有以下几个核心方法: 1. **生成密钥**:`generateKey()` 方法,通过`KeyGenerator.getInstance("DES")`获取DES的KeyGenerator...

    用delphi写的一个des的加密解密小程序,java写的des的一个类

    Java写的DES的一个类”表明了这个压缩包包含两个部分:一个是使用Delphi编程语言编写的用于执行DES(Data Encryption Standard)加密和解密的小程序,另一个是用Java实现的DES加密类。DES是一种广泛使用的对称加密...

    des加密解密java实现版本

    在Java中实现DES加密和解密是一项常见的任务,通常涉及到`javax.crypto`包中的类和接口。本篇文章将详细阐述DES加密解密的Java实现过程。 首先,我们需要了解DES算法的基本原理。DES是一种块密码,它将明文数据分成...

    RSA加密和3DES加解密

    在项目`encryption_and_decryption`中,可能包含了使用JAVA实现RSA和3DES加密解密的示例代码,通过这些代码可以学习如何在实际开发中应用这两种加密技术。了解并掌握这些加密算法的原理和使用方法,对于提升应用程序...

    收藏 Java c++通过des加密的结果不一样【已解决】

    在一项具体项目中,开发者需要通过Java和C++两种语言实现DES加密功能,并确保两者的加密结果完全相同以便于进行后续的数据交换。但是,在调试过程中发现,即使使用相同的明文和密钥,Java和C++生成的加密结果也不...

Global site tag (gtag.js) - Google Analytics