`
jin8000608172
  • 浏览: 135782 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

加解密

阅读更多

package com.pingan.main;

import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;

import org.apache.commons.codec.binary.Base64;

/**
 * DES加密介绍 DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,
 * 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,
 * 24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现 。
 * 注意:DES加密和解密过程中,密钥长度都必须是8的倍数
 */
public class LoginDesUtil {
	public LoginDesUtil() {
	}

	// 测试
	public static void main(String args[]) throws Exception {
		String plaintext = "that is the New game!";
		System.out.println("URLEncode前:" + plaintext);
		String key = "T0FgyDSM";
		plaintext=URLEncoder.encode(plaintext,"UTF-8");
		String ciphertext = LoginDesUtil.encryptDES(plaintext, key);
		System.out.println("明文:" + plaintext);
		System.out.println("密钥:" + key);
		System.out.println("密文:" + ciphertext);
		System.out.println("解密后:" + LoginDesUtil.decryptDES(ciphertext, key));
		System.out.println("URLEncode后:" + URLDecoder.decode(LoginDesUtil.decryptDES(ciphertext, key),"UTF-8"));
	}

	private static byte[] iv = { 1, 4, 7, 8, 5, 2, 6, 3 };

	public static String encryptDES(String encryptString, String encryptKey)
			throws Exception {
		IvParameterSpec zeroIv = new IvParameterSpec(iv);
		SecretKey key = generateKey(encryptKey);
		Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
		byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
		return Base64.encodeBase64String(encryptedData);
	}

	public static String decryptDES(String decryptString, String decryptKey)
			throws Exception {
		byte[] byteMi = Base64.decodeBase64(decryptString);
		IvParameterSpec zeroIv = new IvParameterSpec(iv);
		SecretKey key = generateKey(decryptKey);
		Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
		cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
		byte decryptedData[] = cipher.doFinal(byteMi);

		return new String(decryptedData);
	}
	
	public static SecretKey generateKey(String secretKey) throws NoSuchAlgorithmException{  
		KeyGenerator _generator = KeyGenerator.getInstance("DES");  
        //防止linux下 随机生成key   
        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );  
        secureRandom.setSeed(secretKey.getBytes());  
          
        _generator.init(56,secureRandom);  
	      
	    // 生成密钥  
	    return _generator.generateKey();  
	} 
}

分享到:
评论

相关推荐

    JavaScript_RSA加解密+分段加解密.zip

    使用RSA非对称加密完成JavaScript前端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,但是关于如何使用RSA完成前端的组合加密解密,东西就非常少了,并且由于RSA的特性,一...

    minifilter透明加解密源码

    现在很多做透明加解密的初学者都比较困惑,不知从何下手,我也是如此,从什么都不会开始,慢慢肯文件系统内幕,到OSR上面请教,四个月的时间还是收获颇丰。其实真正研究以后会发现,很多都是体力活,要不断的去跟踪...

    实用C#加解密工具集,SM2,SM3,SM4国密加解密,RSA加解密签名验签,DES加解密

    实用C#加解密工具集,拿来即用。 包含以下示例代码: SM2、SM3、SM4国密加解密; RSA加解密、签名、验签(XML、PEM密钥格式); DES加解密; BASE64编解码,HEX编解码,MD5加密; 生成GUID,生成唯一KEY。

    DES_3DES加解密算法(c语言)

    基于STM32的软件加解密算法,包括DES,3DES的ECB,CBC模式。但是验证时CBC模式的初始向量为0时,数据的加解密正确,但是初始向量不为0时,则加解数据有错误。 注意:经测试DES,3DES的CBC模式初始向量不为0时,加...

    supersoft加解密工具

    supersoft加解密工具

    基于CryptoAPI 的数据加解密文件.rar

    *由于多方尝试并编写Openssl对文件的加解密方法,均以失败告终,所以我们小组绝对采用新的加密算法,即Windows CrytoAPI,由微软公司提出的一种安全 *加密应用服务框架 *CryptoAPI数据加解密,它的流程为: *(加密...

    超级加解密支持库1.1#0版(第三方)

    易语言encrypt.fne支持库中文名为易语言超级加解密支持库,本易语言支持库主要是实现数据及文件的加解密。易语言encrypt.fne支持库为一般支持库,需要易语言系统3.0版本的支持,需要易语言系统核心支持库3.0版本的...

    vue RSA加解密(完美解决加解密文本过长问题)

    rsa加解密

    md5加解密c++md5加解密c++

    md5加解密md5加解密md5加解密c++

    C语言实现AES加解密

    根据AES加解密的原理,利用C语言编写了能实现文件加密功能的AES加解密代码。

    JS加解密 JAVA加解密

    前端加解密 后端加解密 JS加解密 JAVA加解密 前端加解密 后端加解密 JS加解密 JAVA加解密 前端加解密 后端加解密 JS加解密 JAVA加解密 前端加解密 后端加解密 JS加解密 JAVA加解密

    DES加解密(JS端加解密)

    des加解密说明及代码应用,des加解密服务端java的实现以及对js端应用的实现

    易语言字符串加解密

    易语言字符串加解密源码,字符串加解密,加密文本,处理密码,解密文本

    文件加解密软件

    加密软件方便给文档、文件夹各类文件快速加密解密,安全可靠管理自己文件。

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

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

    C 语言实现aes加解密

    C 语言实现aes加解密

    C++ 实现 3DES加解密Base64加解密

    例子代码,用c++实现了先用3DES进行内容的加密再用Base64加密输出,和先用base64解密再用3DES解密输出两个例子,完成了网址常用的加解密输出.代码是用vs2013实现的。

    C++ Qt5实现RSA加解密

    程序包含加解密两个部分,由于密文和明文存在int数组中,所以暂时只能加密数字,需要的人可以自行修改。 程序有一个小bug,输出加解密的结果的时候,会判断数组为空结束输出,但是这里数组初始化为0,故若结果是1101...

    xxtea/aes加密解密工具

    采用openssl1.1.0c,支持xxtea/aes加密解密,选择算法后输入秘钥及签名即可完成加密解密,即可加/解密单个文件,也可以指定加解密一个目录下的所有文件.

    微信消息加密解密包

    第三方平台开发者在代替公众号接收和处理消息时,出于安全考虑,必须对消息内容进行必须的加解密。 本文讲述如何使用示例代码接入加解密,参考本文并使用示例代码,加解密的接入将非常简单。若想进一步的了解细节,...

Global site tag (gtag.js) - Google Analytics