`

3DES加密解密的例子

阅读更多
package com.snailteam.adserver.until;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;



/**
 * @author :xiaofancn
 * @version :2011-11-11 上午11:02:22
 * 
 */

 
public class Tool3DES {
	private static final String Algorithm = "DESede"; // 定义 加密算法,可用
	private static final int Keysize = 168;
	
	/**
	 * 将byte[]转化成16进制字符串
	 * @param buf
	 * @return
	 */
	public static String parseByte2HexStr(byte buf[]) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < buf.length; i++) {
			String hex = Integer.toHexString(buf[i] & 0xFF);
			if (hex.length() == 1) {
				hex = '0' + hex;
			}
			sb.append(hex.toUpperCase());
		}
		return sb.toString();
	}
	/**
	 * 将16进制字符串转化成byte[]
	 * @param buf
	 * @return
	 */
	public static byte[] parseHexStr2Byte(String hexStr) {
		if (hexStr.length() < 1)
			return null;
		byte[] result = new byte[hexStr.length() / 2];
		for (int i = 0; i < hexStr.length() / 2; i++) {
			int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
			int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
					16);
			result[i] = (byte) (high * 16 + low);
		}
		return result;
	}

	/**
	 *  加密
	 *   message->密文byte[]->16进制密文字符串
	 * @param password
	 * @param message
	 * @return
	 */
	public static String encrypt(String password, String message) {
		try {
			KeyGenerator kgen = KeyGenerator.getInstance(Algorithm);
			kgen.init(Keysize, new SecureRandom(password.getBytes()));
			SecretKey secretKey = kgen.generateKey();
			byte[] enCodeFormat = secretKey.getEncoded();
			SecretKeySpec key = new SecretKeySpec(enCodeFormat, Algorithm);
			Cipher cipher = Cipher.getInstance(Algorithm);// 创建密码器
			byte[] byteContent = message.getBytes("utf-8");
			cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
			byte[] result = cipher.doFinal(byteContent);
			return parseByte2HexStr(result);
		} catch (NoSuchAlgorithmException e) {
			
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			
			e.printStackTrace();
		} catch (BadPaddingException e) {
			
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 解密
	 *  16进制密文字符串->byte[]->解密
	 * @param password
	 * @param message
	 * @return
	 */
	public static String decrypt(String password, String message) {
		KeyGenerator kgen;
		try {
			kgen = KeyGenerator.getInstance(Algorithm);
			kgen.init(Keysize, new SecureRandom(password.getBytes()));
			SecretKey secretKey = kgen.generateKey();
			byte[] enCodeFormat = secretKey.getEncoded();
			SecretKeySpec key = new SecretKeySpec(enCodeFormat, Algorithm);
			Cipher cipher = Cipher.getInstance(Algorithm);// 创建密码器
			byte[] byteContent = parseHexStr2Byte(message);
			cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
			byte[] result = cipher.doFinal(byteContent);
			return new String(result);
		} catch (NoSuchAlgorithmException e) {
			
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			
			e.printStackTrace();
		} catch (BadPaddingException e) {
			
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		String content = "你好";
		String password = "123456789";
		System.out.println("加密前:"+content);
		String temp = encrypt(password, content);
		System.out.println("加密后:"+temp);
		temp = decrypt(password, temp);
		System.out.println("解密后:"+temp);
	}
}
 
分享到:
评论

相关推荐

    3DES加密解密算法

    以下是关于3DES加密解密算法在Java中的实现细节: 首先,为了使用3DES,Java程序需要引入特定的JAR包,这些包通常位于`JAVA_HOME/jre/lib/`目录下,包括`jce.jar`、`US_export_policy.jar`、`local_policy.jar`以及...

    C#3DES加密解密

    本篇文章将深入探讨C#中实现3DES加密解密的方法。 3DES的工作原理是通过三次应用DES算法来提高安全性。它将明文分成64位的数据块,然后用三个不同的密钥进行三次独立的DES加密过程:一次加密、一次解密、再一次加密...

    cryptopp的des加密解密

    标题"cryptopp的DES加密解密"指出我们将讨论的是使用Cryptopp库进行DES(Data Encryption Standard)加密与解密的方法。Cryptopp是一个强大的、免费的C++类库,提供了多种密码学算法,包括DES,用于数据的安全传输和...

    des加密解密及md5加密

    des加密解密及md5加密.例子及应用!!!

    des加密解密程序(vc)

    在这个"VC下DES加密解密程序"中,我们将会探讨如何在Visual C++环境下实现DES算法。 首先,DES加密算法基于64位的数据块进行操作,但实际有效的密钥长度只有56位,因为有8位用于奇偶校验和设计上的特殊用途。DES...

    Java版Des加密解密源码

    java版Des加密解密源码 DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件...

    JAVA实现3DES加密解密

    总的来说,通过Java实现3DES加密解密,我们需要理解加密算法的基本原理,熟悉Java的相关加密库,并掌握如何生成和使用密钥。在实际开发中,确保数据的安全性至关重要,因此正确地使用加密技术是每个IT专业人员必备的...

    Delphi7与C#实现Des加解密互通Demo,全网找遍只次一份

    标题中的“Delphi7与C#实现Des加解密互通Demo”指的是一个示例项目,该项目旨在演示如何在Delphi 7和C#之间进行DES加密和解密操作,确保两个环境下的数据一致性。全网找遍只此一份,表明这个示例可能比较罕见且具有...

    3des.zip_3DES加密解密_3des_3des java

    在Java中实现3DES加密解密,需要使用`javax.crypto`包中的`Cipher`类。以下是一个简单的3DES加密解密Java示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto....

    des加密解密C++实现

    des加密解密的C++实现,该资源提供了完整的例子,调用方便,开发产品时直接参考试用即可

    STM32上实现D3DES加密

    6. **执行D3DES**:首先用第一个密钥执行DES加密,然后用第二个密钥执行DES解密,最后再用第一个密钥进行一次DES加密。这个过程就是D3DES的核心。 7. **密文后处理**:加密完成后,对密文进行逆初始置换,得到最终...

    des加密解密以及WPF 转圈圈动画

    根据提供的文件信息,我们可以从中提炼出两个主要的知识点:一是关于DES加密解密技术的应用;二是关于WPF中实现转圈圈动画的方法。下面将分别对这两个知识点进行详细阐述。 ### DES加密解密 #### 1. DES简介 数据...

    C#实现DES加解密完整类源码

    - C#提供了一套完整的加密API,位于`System.Security.Cryptography`命名空间下,包括DES类,用于实现DES加密和解密。 3. **创建DES对象**: - 使用`new DESCryptoServiceProvider()`来创建一个DES加密服务提供者...

    js DES 加解密例子

    下面将详细介绍DES加密解密的基本原理、JS实现以及使用时需要注意的事项。 一、DES算法简介 DES算法由IBM公司于1970年代提出,最初是为美国政府设计的标准加密算法。它基于Feistel网络结构,通过16轮迭代过程,将64...

    MD5加密, DES加密解密, RAS加密解密演示实例

    以下是一个DES加密和解密的例子: ```csharp using System; using System.IO; using System.Text; using System.Security.Cryptography; public class DESExample { public static void EncryptFile(string input...

    DES 加密 解密源码 java版 可运行

    本Java实现的DES加密解密源码提供了一个可运行的例子,这对于理解和学习DES的工作原理非常有帮助。源码中的注释清晰,使得开发者能够快速了解每一步操作的含义。 DES加密过程主要包括以下几个步骤: 1. **Key ...

    DES3.zip_DES加密js脚本文件_js des3解密

    在JavaScript环境中实现DES或3DES加密解密,可以使用现有的库,如`crypto-js`。这个压缩包中的"DES3.js"文件很可能就是使用了`crypto-js`库或者其他类似的JavaScript库,实现了DES和3DES的加密解密功能。JavaScript...

    C语言3des加密解密算法,代码清晰,单片机上也能用,速度快,有例子

    1. `wudes.c`:这是主要的3DES加密解密功能实现的源代码。其中可能包含了3DES的算法实现,以及与之相关的函数,如设置密钥、加密和解密的接口。 2. `wudesutils.c`:这个文件可能包含了辅助功能,如字节操作、内存...

    DES加密解密算法

    在C#中实现DES加密解密,你需要使用`System.Security.Cryptography`命名空间中的`DESCryptoServiceProvider`类。以下是一个简单的示例: ```csharp using System; using System.IO; using System.Security....

    des加密解密—JS实例

    本实例将探讨如何使用JavaScript实现DES加密解密功能。 首先,我们需要理解DES的基本原理。DES是一种分组密码,它将明文数据分成64位的数据块,然后用64位的密钥对每个数据块进行加密。实际的DES算法中,有56位是...

Global site tag (gtag.js) - Google Analytics