`

DES加解密

阅读更多

 

package com.my.framework.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.util.HashMap;
import java.util.Map;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

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

/**
 * 说明:DES加解密
 * @version 1.0
 */
public class DESEncrypter {
	/**
	 * 加密Clipher
	 */
	private Cipher enCipher;
	/**
	 * 解密clipher
	 */
	private Cipher deCipher;
	/**
	 * KEY
	 */
	private SecretKey key = null;
	/**
	 * 
	 */
	private static DESEncrypter instance;

	public static synchronized DESEncrypter getInstance() throws InvalidKeyException,
			NoSuchAlgorithmException, NoSuchPaddingException {
		if (instance == null) {
			instance = new DESEncrypter();
			instance.init();
		}
		return instance;
	}

	public synchronized void init() throws NoSuchAlgorithmException,
			NoSuchPaddingException, InvalidKeyException {
		try {
			SecureRandom sr = new SecureRandom();
	        DESKeySpec dks = new DESKeySpec("myKey".getBytes());
	        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
			key = keyFactory.generateSecret(dks);
		} catch (InvalidKeySpecException e) {
			e.printStackTrace();
		} 

		enCipher = Cipher.getInstance("DES");
		deCipher = Cipher.getInstance("DES");
		enCipher.init(Cipher.ENCRYPT_MODE, key);
		deCipher.init(Cipher.DECRYPT_MODE, key);
	}

	/**
	 * 加密
	 * 
	 * @param str
	 * @return
	 * @throws UnsupportedEncodingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 */
	public String enCrypt(String str) throws UnsupportedEncodingException,
			IllegalBlockSizeException, BadPaddingException {
		byte[] utf8 = str.getBytes("UTF8");
		byte[] enc = enCipher.doFinal(utf8);
		return new BASE64Encoder().encode(enc);
	}

	/**
	 * des解密
	 * 
	 * @param str
	 * @return
	 * @throws IOException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 */
	public String deCrypt(String str) throws IOException,
			IllegalBlockSizeException, BadPaddingException {
		byte[] dec = new BASE64Decoder().decodeBuffer(str);
		byte[] utf8 = deCipher.doFinal(dec);
		return new String(utf8, "UTF8");
	}

	/**
	 * 生成KEY
	 * 
	 * @return
	 */
/*	public static SecretKey generateSecretKey() {
		SecretKey secretKey = null;

		try {
			secretKey = KeyGenerator.getInstance("DES").generateKey();

			FileOutputStream keyFile = new FileOutputStream("d://rd_ds.key");
			ObjectOutputStream keyObject = new ObjectOutputStream(keyFile);
			keyObject.writeObject(secretKey);
			keyFile.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return secretKey;
	}*/

	public static void main(String[] args) throws InvalidKeyException,
			NoSuchAlgorithmException, NoSuchPaddingException,
			IllegalBlockSizeException, BadPaddingException, IOException {
		// DESEncrypter.generateSecretKey();
		DESEncrypter des = DESEncrypter.getInstance();
		String crypt = des.enCrypt("clgl_test");
		System.out.println(crypt);
		String dc = des.deCrypt("irfiM+w48a88LPME0HnP3g==");
		System.out.println(dc);
	}
}

 

备注: DESKeySpec等类来源于jdk

 

分享到:
评论

相关推荐

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

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

    3DES加密解密工具

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

    DES加解密(JS端加解密)

    在JavaScript环境中,DES加解密可以用于保护敏感数据,如用户密码、API密钥等,确保在网络传输中数据的安全性。 在JavaScript中实现DES加解密,通常需要借助库,如`crypto-js`。这个库提供了多种加密算法,包括DES...

    MFC实现DES加密解密实现

    在这个项目中,我们将探讨如何使用MFC在VC++环境中实现DES加密和解密。 首先,DES是一种块加密算法,它将明文数据分为64位的块进行处理。但是,由于其中7位是奇偶校验位,实际有效密钥长度为56位。DES通过一系列...

    DES加密解密(c++实现)

    DES加密解密(c++实现)

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

    下面我们将详细讨论C#实现DES加解密的相关知识点。 1. **基本概念**: - **对称加密**:加密和解密使用同一密钥。 - **DES算法**:基于Feistel结构,通过多次迭代实现数据的加密和解密。 - **密钥长度**:DES的...

    visual c++ VC实现3DES加解密 加密解密.zip

    本项目是使用Visual C++实现3DES加解密功能的一个实例,下面将详细介绍3DES算法及其在Visual C++中的实现。 3DES,全称为三重DES,是对DES(Data Encryption Standard)的加强版。DES是一种块密码,采用64位的数据...

    DES加密解密实验报告

    DES加密解密实验旨在帮助学生理解其工作原理,并深入研究DES的弱点,特别是关于弱密钥的问题。 实验的核心是DES算法的执行流程,主要包括以下几个步骤: 1. **初始置换(IP)**:这是加密过程的第一步,用于打乱...

    java和javascript之间的DES加密解密

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

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

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

    用 MFC 实现 DES 加密解密算法

    本文将深入探讨如何使用MFC(Microsoft Foundation Classes)库实现DES(Data Encryption Standard)加密解密算法,以及如何支持文件的打开和保存操作。 DES是一种对称加密算法,由IBM在1970年代开发,并在1977年被...

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

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

    DES加密 解密 方法 MFC

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

    QT做的DES加解密实例

    在这个“QT做的DES加解密实例”中,我们将深入探讨如何使用QT库来实现DES的加解密功能。 首先,我们需要理解DES的工作原理。DES是一种块加密算法,它将64位的数据块作为输入,并使用56位的密钥进行加密或解密。实际...

    cryptopp的des加密解密

    4. **创建加密和解密对象**:使用`DES_EDE3`或`DES_EDE2`(三重DES或双密钥DES)来增强安全性,创建加密和解密对象,如`DES_EDE3::Encryption encryptor(key, sizeof(key))`和`DES_EDE3::Decryption decryptor(key, ...

    微信小游戏DES加解密DEMO

    微信小游戏DES加解密DEMO是一个实用的示例项目,主要展示了如何在微信小游戏平台中进行数据的安全加密和解密操作。DES(Data Encryption Standard)是一种经典的对称加密算法,而`crypto-js`是一个JavaScript库,它...

    des加密解密工具 .exe文件

    des加密解密工具

    C语言实现Des加解密

    ### C语言实现DES加解密 #### DES简介 DES(Data Encryption Standard,数据加密标准)是一种对称密钥算法,用于加密和解密数据。它最初由IBM开发,并于1977年被美国国家标准局采纳为官方标准。DES算法采用64位块...

    DES加密解密算法 C语言源代码

    可能包含的函数有`des_encrypt()`用于加密,`des_decrypt()`用于解密,以及辅助函数如`initial_permutation()`、`permutation_function_1()`等,分别对应DES算法中的各个阶段。 由于代码未给出,我们无法详细讨论...

    des加密解密工具

    这款工具的优点在于用户可以本地运行,避免了在线加解密可能带来的密钥泄露风险,确保了数据安全性。用户只需要输入相应的密钥和待处理的数据,工具就能完成加密或解密过程。对于需要保护敏感信息的个人或企业来说,...

Global site tag (gtag.js) - Google Analytics