`
royboy
  • 浏览: 69167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

DES加密实例

阅读更多

最近在学习加密解密的相关知识,为了加强记忆,参照一些资料写了些简单的加解密实现。写不好,欢迎大家拍砖和指教。

 

DES加密实例

package com.royboy.encrypt;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;

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

import com.sun.org.apache.xml.internal.security.utils.Base64;

public class DesTester {

	public final static String FILEPATH = "C:\\BitIO.txt";
	public static byte[] data ;

	/**
	 * 生成密钥 
	 * @return 密钥内容
	 * @throws NoSuchAlgorithmException
	 */
	public void generateKey() throws NoSuchAlgorithmException {
		//实例化密钥生成器
		KeyGenerator kg = KeyGenerator.getInstance("DES");
		//初始化
		kg.init(56);
		//生成密钥
		SecretKey secretKey = kg.generateKey();
		//获得二进制编码的密钥
		byte[] b = secretKey.getEncoded();

		/*
		 * 将密钥写入到文件中
		 * */
		File fileInst = new File(FILEPATH);
		try {
			if (!fileInst.exists())
				fileInst.createNewFile();
			FileWriter fw = new FileWriter(fileInst);
			//对生成的密钥进行了BASE64加密
			String keyEncode = Base64.encode(b);
			System.out.println("生成的密钥:"+keyEncode);
			fw.write(keyEncode);
			fw.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}

	private byte[] getKey() {
		byte[] content = null;
		try {
			File fileInst = new File(FILEPATH);
			BufferedInputStream in = new BufferedInputStream(
					new FileInputStream(fileInst));
			ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
			byte[] temp = new byte[1024];
			int size = 0;
			while ((size = in.read(temp)) != -1) {
				out.write(temp, 0, size);
			}
			in.close();
			content = out.toByteArray();
			content = Base64.decode(content);
		} catch(IOException ioe){
			ioe.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}
		return content;
	}
	
	/**
	 * DES数据加密
	 * @return 加密后的数据(用户base64进行了编码)
	 */
	private String encryptData(){
		byte[] encrypt =null;
		byte[] sk = getKey();
		try {
			//实例化密钥材料
			DESKeySpec dks = new DESKeySpec(sk);
			//实例化秘密密钥工厂
			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
			//生成秘密密钥
			SecretKey secretKey = keyFactory.generateSecret(dks);
			//实例化
			Cipher cipher = Cipher.getInstance("DES");
			//实始化,设置为加密模式
			cipher.init(Cipher.ENCRYPT_MODE, secretKey);
			//执行加密操作
			encrypt = cipher.doFinal(data);
		} catch (Exception e) {
		}
		//对加密后的内容进行了BASE64编码。非必须,对于网络传送数据来说,二进制更为理想
		String encryptStr = Base64.encode(encrypt);
		System.out.println("加密后的数据(base64):"+encryptStr);
		return encryptStr;
	}
	
	/**
	 * DES数据解密
	 * @param d 需要解密的数据
	 * @return 解密后的数据
	 */
	private byte[] decryptData(String encryptStr){
		byte[] decrypt =null;
		/*
		 * 得到密钥材料
		 * */
		byte[] sk = getKey();
		try {
			//实例化密钥材料
			DESKeySpec dks = new DESKeySpec(sk);
			//实例化秘密密钥工厂
			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
			//生成秘密密钥
			SecretKey secretKey = keyFactory.generateSecret(dks);
			//实例化
			Cipher cipher = Cipher.getInstance("DES");
			//实始化,设置为解密模式
			cipher.init(Cipher.DECRYPT_MODE, secretKey);
			//执行解密操作
			decrypt = cipher.doFinal(Base64.decode(encryptStr));
		} catch (Exception e) {
		}
		return decrypt;
	}
	
	/**
	 * DES加密测试方法
	 * @param dataStr 要加密的原始内容
	 * @throws Exception
	 */
	public void desTest(String dataStr) throws Exception{
		System.out.println("=====DES=====");
		System.out.println("原始数据:"+dataStr);
		data = dataStr.getBytes();
		generateKey();
		System.out.println("解密后的数据(string):"+new String(decryptData(encryptData())));
		System.out.println("=====DES=====");
	}
	
	public static void main(String[] args) throws Exception{
		DesTester dt = new DesTester();
		dt.desTest("中华人民共和国");
	}
}

 

分享到:
评论

相关推荐

    des加密实例

    在给定的"des加密实例"中,我们看到这个项目是使用VC6.0编写的。VC6.0是Microsoft Visual C++ 6.0的简称,是一款广泛使用的C++集成开发环境,尤其适用于Windows平台上的应用程序开发。在这个实例中,开发者已经创建...

    Des加密 实例

    简单的DES加密解密实例,平台为VS2010,C#Winform应用程序。

    delphi des 加密实例

    Delphi DES加密实例是关于使用Delphi编程语言实现数据加密标准(DES)的一个具体应用案例。DES是一种广泛使用的对称加密算法,它基于一个64位的密钥对数据进行64位块的加密和解密。在Delphi中,可以使用 Indy 或者 ...

    crypto-js以及aes及3des加密实例

    接下来,我们谈谈3DES(Triple Data Encryption Standard),它是基于DES加密算法的一种加强版。3DES通过三次应用DES算法来提高安全性。尽管3DES比AES慢,但在某些情况下,如兼容旧系统时,可能仍会用到3DES。在...

    C# DES加密解密

    这个类提供了一系列的方法,如`Create()`用于创建一个DES加密实例,`Encrypt()`和`Decrypt()`用于加密和解密数据。 3. **创建DES加密器** 使用`DES.Create()`方法创建一个DES加密器对象。由于默认的DES实现不支持...

    DES文件加密 C#

    1. **创建DES实例**:首先,通过DESCryptoServiceProvider类创建一个DES加密实例,并设置密钥和初始化向量(IV)。注意,密钥必须是8字节,IV也应为8字节。通常,我们使用随机生成器(RNGCryptoServiceProvider)来...

    c# des加密解密小程序

    1. **创建DES对象**:通过` DESCryptoServiceProvider.Create()`方法创建一个DES加密实例,并设置密钥和初始化向量(IV)。注意,密钥和IV应保持一致,否则解密时会出现错误。 2. **设置模式和填充方式**:可以设置...

    VC++DES双层加密实例

    在这个“VC++ DES双层加密实例”中,我们将探讨如何使用C++编程语言,特别是在Visual C++ 6.0环境下,实现基于DES(Data Encryption Standard)算法的双层加密。DES是一种经典的对称加密算法,它在1970年代被广泛...

    skynet 账号密码des加密

    通过这个类,你可以创建一个DES加密实例,设置密钥和IV,然后对字符串进行加密和解密操作。 C++动态链接库(DLL)的使用可能是为了利用C++的性能优势或特定的库功能。在C#中调用C++ DLL,需要使用P/Invoke...

    sql server 中进行des加密

    在SQL Server中进行DES加密是保护敏感数据的一种常见方法,特别是在C#应用程序中与数据库交互时。DES(Data Encryption Standard)是一种对称加密算法,它使用相同的密钥进行加密和解密,提供了一种相对快速的数据...

    JAVA实现des加密算法 实例

    以下将详细介绍如何在Java中实现DES加密,并提供一个实例。 首先,理解DES算法的基本原理: DES是一种块密码,它将明文分为64位的数据块进行加密,其中第8位用于奇偶校验,实际工作在56位上。它使用了Feistel结构,...

    用C语言实现DES加密(含实例)

    C实现DES加密用,C语言实现DES加密(含实例),是学习加密算法的好东西

    DES加密解密实例网络安全传输系统

    在"DES加密解密实例网络安全传输系统"中,DES算法用于确保在网络上传输的数据不被未授权的第三方获取或篡改。数据在发送端使用DES加密,变为密文,然后通过网络发送到接收端。接收端接收到密文后,使用同样的DES密钥...

    DES加密解密JS版

    在JS版的DES加密解密中,我们可以看到JavaScript语言被用来实现这一功能,这对于Web应用中的安全通信非常有用。 DES加密过程分为以下几个步骤: 1. **初始置换**:原始的64位明文数据经过一个固定的置换表进行变换...

    DES加密DEMO(C#与JAVA)

    本DEMO提供了C#和JAVA两种编程语言下的DES加密和解密实现,这对于理解DES算法及其在实际开发中的应用非常有帮助。 1. **DES算法原理** - **结构**:DES算法基于Feistel网络,它将明文分为左右两半,通过一系列的...

    DES加密 解密 方法 MFC

    DES加密 解密 方法: DESr DESw 支持3DES加密 解密 类中利用函数重载的方式 实现两种加密方式 加密后为16进制字符串 使用方法: 实例化一个对象 然后就可以随便用了。 如 DES加密 解密 CString sd,sd2; yxyDES2 ...

    javascript前端DES加密,VB.NET、C#后端服务器解密

    1. 创建DES实例:使用DESCryptoServiceProvider类创建一个DES加密对象。 2. 设置密钥和初始化向量:这两个参数必须与前端加密时保持一致,否则无法正确解密。 3. 解密数据:使用CreateDecryptor方法获取解密器,然后...

    chilkat 3des 加密

    安装完成后,我们可以通过导入Chilkat模块并实例化3DES对象来开始使用3DES加密功能。例如: ```python from Chilkat import Ck3Des # 实例化3DES对象 des = Ck3Des() # 设置密钥 key = "我的3DES密钥".encode('...

    3DES加密java实现

    本篇文章将详细探讨Java环境下如何实现3DES加密算法,并介绍相关知识点。 首先,让我们了解3DES的工作原理。3DES是对原始DES算法的扩展,它通过执行三次加密过程来提高安全性。简而言之,3DES分为两种模式:EDE...

Global site tag (gtag.js) - Google Analytics