`
Tristan_S
  • 浏览: 383363 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DES 加密

阅读更多
package com.huateng.ebank.framework.security;

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

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;


/**
 * DES encryption algorithm, providing the encryption and decryption
 * algorithm for byte array and string
 */

public class CryptionData {
	// The length of Encryptionstring should be 8 bytes and not be
	// a weak key
	private String EncryptionString;

	// The initialization vector should be 8 bytes
	private final byte[] EncryptionIV = "abcdefgh".getBytes();
	private final static String DES = "DES/CBC/PKCS5Padding";
  
	/**
	 * Saving key for encryption and decryption
	 * @param EncryptionString String
	 */
	public CryptionData(String EncryptionString) {
		this.EncryptionString = EncryptionString;
	}

	/**
	 * Encrypt a byte array
	 * @param SourceData byte[]
	 * @throws Exception
	 * @return byte[]
	 */
	public byte[] EncryptionByteData(byte[] SourceData) throws Exception {
		byte[] retByte = null;

		// Create SecretKey object

		byte[] EncryptionByte = EncryptionString.getBytes();
		DESKeySpec dks = new DESKeySpec(EncryptionByte);

		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
		SecretKey securekey = keyFactory.generateSecret(dks);

		// Create IvParameterSpec object with initialization vector
		IvParameterSpec spec=new IvParameterSpec(EncryptionIV);

		// Create Cipter object
		Cipher cipher = Cipher.getInstance(DES);

		// Initialize Cipher object
		cipher.init(Cipher.ENCRYPT_MODE, securekey, spec);

		// Encrypting data
		retByte = cipher.doFinal(SourceData);
		return retByte;
	}

	/**
	 * Decrypt a byte array
	 * @param SourceData byte[]
	 * @throws Exception
	 * @return byte[]
	 */
	public byte[] DecryptionByteData(byte[] SourceData) throws Exception {
		byte[] retByte = null;

		// Create SecretKey object
		byte[] EncryptionByte = EncryptionString.getBytes();
		DESKeySpec dks = new DESKeySpec(EncryptionByte);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
		SecretKey securekey = keyFactory.generateSecret(dks);

		// Create IvParameterSpec object with initialization vector
		IvParameterSpec spec=new IvParameterSpec(EncryptionIV);

		// Create Cipter object
		Cipher cipher = Cipher.getInstance(DES);

		// Initialize Cipher object
		cipher.init(Cipher.DECRYPT_MODE, securekey, spec);

		// Decrypting data
		retByte = cipher.doFinal(SourceData);

		return retByte;
	}

	/**
	 * Encrypt a string
	 * @param SourceData String
	 * @throws Exception
	 * @return String
	 */
	public String EncryptionStringData(String SourceData) throws Exception {
		String retStr = null;
		byte[] retByte = null;

		// Transform SourceData to byte array
		byte[] sorData = SourceData.getBytes();

		// Encrypte data
		retByte = EncryptionByteData(sorData);

		// Encode encryption data
		BASE64Encoder be = new BASE64Encoder();
		retStr = be.encode(retByte);

		return retStr;
	}

	/**
	 * Decrypt a string
	 * @param SourceData String
	 * @throws Exception
	 * @return String
	 */
	public String DecryptionStringData(String SourceData) throws Exception {
		String retStr = null;
		byte[] retByte = null;

		// Decode encryption data
		BASE64Decoder bd = new BASE64Decoder();
		byte[] sorData = bd.decodeBuffer(SourceData);

		// Decrypting data
		retByte = DecryptionByteData(sorData);
		retStr = new String(retByte);

		return retStr;
	}
	
	public static void main(String[] args){
		if(args.length < 1){
			System.err.print("Error Using : args should contain the cmd[encryption || decryption || help || ?) 、password and key");
			System.exit(-1);
		}
		String cmd = args[0];
		if( "encryption".equalsIgnoreCase(cmd)){
			if(args.length != 3){
				System.err.print("Error Using : the method of encryption need the password and key");
				System.exit(-1);
			}
			System.out.println("-------------welcome using CryPtionData----------------");
			System.out.println("                  encryption strat                     ");
			System.out.println("password = " + args[1]);
			System.out.println("key = " + args[2]);
			CryptionData cryptionData = new CryptionData(args[2]);
			try{
				String envPwd = cryptionData.EncryptionStringData(args[1]);
				System.out.println("encry_password = " + envPwd);
			System.out.println("-------------------Success , bye!----------------------");
				System.exit(0);
			}catch(Exception ex){
				ex.printStackTrace();
			System.err.println("------------------fail , try it again!-----------------");
				System.exit(-1);
			}
		}else if( "decryption".equalsIgnoreCase(cmd)){
			if(args.length != 3){
				System.err.print("Error Using : the method of decryption need the encry_password and key");
				System.exit(-1);
			}
			System.out.println("-------------welcome using CryPtionData----------------");
			System.out.println("                   decryption strat                    ");
			System.out.println("encry_password = " + args[1]);
			System.out.println("key = " + args[2]);
			CryptionData cryptionData = new CryptionData(args[2]);
			try{
				String pwd = cryptionData.DecryptionStringData(args[1]);
				System.out.println("password = " + pwd);
				System.out.println("----------------------Success , bye!--------------------");
				System.exit(0);
			}catch(Exception ex){
				ex.printStackTrace();
		        System.err.println("----------------fail , try it again!-------------------");
				System.exit(-1);
			}
		}else if( "help".equalsIgnoreCase(cmd) || "?".equalsIgnoreCase(cmd)){
			System.out.println("-------------welcome using CryPtionData help----------------");
			System.out.println("function: encryption or decryption");
			System.out.println("eq. 'java CryptionData encryption password key' , you can get encry password!");
			System.out.println("eq. 'java CryptionData decryption encry_password  key' , you can get password!");
			System.out.println("------------------------Bye Bye!----------------------------");
		}else{
			System.err.print("Error Using : no support function, you can input 'java CryptionData help'");
			System.exit(-1);
		}
	
	}
}
分享到:
评论

相关推荐

    des加密解密_Des加密解密_DES加密_

    在给定的“des加密例程”中,可能包含了一个调用动态链接库(DLL)实现DES加密解密的示例代码。DLL是Windows操作系统中的一种共享库,可以被多个程序同时调用,节省内存资源并便于代码复用。这个示例可能涉及以下...

    3DES加密解密工具

    标题中的“3DES加密解密工具”指的是一个用于执行三重数据加密标准(3DES,Triple DES)的软件工具,这种工具通常用于保护敏感数据的安全,确保信息在传输过程中的机密性。3DES是DES(Data Encryption Standard,...

    C语言实现DES加密解密算法

    DES加密解密算法的C语言实现 DES(Data Encryption Standard)是一种对称密钥 BLOCK 加密算法,使用 56 位密钥对 64 位数据块进行加密。下面是 DES 加密解密算法的 C 语言实现的知识点总结。 字节与二进制转换 在...

    VB实现DES加密解密算法,vb加密和解密,VBA

    本篇文章将详细探讨如何在VB环境中实现DES加密和解密,以及相关的VBA(Visual Basic for Applications)应用。 首先,DES是一种块加密算法,它的基本工作原理是将明文数据分为64位的块,然后通过一系列复杂的数学...

    STM32上实现D3DES加密

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

    DES加密_delphi_加解密_des_

    在Delphi编程环境中,实现DES加密和解密是一项常见的任务,特别是在处理敏感信息时。 标题"DES加密_delphi_加解密_des_"所涉及的核心知识点是: 1. **DES算法**:DES是一种64位块密码,使用56位的密钥进行加密。它...

    DES加密算法(c语言实现)

    DES加密算法的工作原理主要包括以下几个步骤: 1. **初始置换**:原始64位的数据块首先经过一个固定的初始置换,使得数据分布更均匀,增强安全性。 2. **16轮迭代**:每轮迭代都包括四个子步骤: - **子密钥产生*...

    3DES加密js前端示例

    3DES(Triple Data Encryption Algorithm,三重数据加密算法)是一种强化版的DES(Data Encryption Standard)加密算法,它通过三次应用DES加密过程来提高安全性。在JavaScript中实现3DES加密通常是为了在网络通信中...

    sql server 中进行des加密

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

    实验一 基于DES加密的TCP聊天程序1

    在本文中,我们将深入探讨基于DES加密的TCP聊天程序的实现,以及DES算法和TCP协议的相关知识。DES(Data Encryption Standard)是一种广泛应用的对称加密算法,它的历史可以追溯到20世纪70年代,由IBM的Lucifer算法...

    DES加密DEMO(C#与JAVA)

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

    Qt写的DES加密算法展示程序

    **Qt DES加密算法展示程序详解** Qt是一个跨平台的C++图形用户界面应用程序开发框架,它为开发者提供了丰富的工具和库,使得构建GUI应用变得容易。在这个“Qt写的DES加密算法展示程序”中,我们将深入探讨DES(Data...

    DES加密算法—实现(C语言)

    在C语言中实现DES加密算法,你需要理解以下几个关键知识点: 1. **DES结构**:DES算法分为两个主要部分——初始置换(IP)和逆初始置换(IP^-1),以及16轮的Feistel网络。每轮包含子步骤如扩展置换(E-Box)、选择...

    nodejs实现3des(2倍长)加密方式,与DES加密工具一致

    使用`crypto.createCipheriv`方法创建3DES加密器,需要指定加密算法('des-ede3'代表3DES),初始化向量(IV,通常为随机生成的8字节序列),以及密钥。例如: ```javascript const iv = Buffer.alloc(8, 0); // ...

    C++ 代码实现DES加密解密源代码类

    在C++中实现DES加密解密,可以创建一个类来封装相关的操作,这样有利于代码的复用和维护。 描述中提到的"单倍双倍加密算法的实现",可能是指使用DES算法进行一次或两次加密的过程。单次DES加密使用同一个密钥对数据...

    Java实现文件的RSA和DES加密

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

    基于des加密的tcp聊天1

    实验报告——基于DES加密的TCP聊天程序 一、实验目的 本次实验的主要目的是让学生深入理解DES(Data Encryption Standard)加密算法的原理,并将其应用于TCP(Transmission Control Protocol)通信中,以增强网络...

    DES加密解密VB6.0源代码

    在VB6.0(Visual Basic 6.0)环境中实现DES加密解密是编程中常见的一种需求,主要用于保护敏感数据的安全。下面将详细阐述DES加密解密原理及其在VB6.0中的实现方法。 1. **DES加密原理**: - **初始置换**:将明文...

    DES加密算法C++实现

    在C++中实现DES加密算法,通常涉及到以下几个关键知识点: 1. **DES算法原理**:DES算法基于Feistel结构,通过16轮迭代变换将64位明文数据转化为64位密文。每一轮迭代包含一个子密钥生成过程和一个替换-置换过程。...

    java和javascript之间的DES加密解密

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

Global site tag (gtag.js) - Google Analytics