Java DES加密解密

import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class CryptKit {

	private final static String DES = "DES";

	public static void main(String args[]) throws Exception {
		String str = encrypt("The cold night", "12345678");
		System.out.println(str);
		String str2 = decrypt("63B121C4EA212F8BC74E8113BDFBFB81", "12345678");
		System.out.println(str2);
	}

	// 加密
	public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
		Cipher cipher = Cipher.getInstance(DES);
		DESKeySpec ds = new DESKeySpec(key);
		SecureRandom sr = new SecureRandom();
		SecretKeyFactory skfactory = SecretKeyFactory.getInstance(DES);
		SecretKey skey = skfactory.generateSecret(ds);
		cipher.init(Cipher.ENCRYPT_MODE, skey, sr);
		byte[] b = cipher.doFinal(data);
		return b;
	}

	// 加密
	public static String encrypt(String data, String key) throws Exception {
		return byte2hex(encrypt(data.getBytes(), key.getBytes()));
	}

	// 解密
	public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
		Cipher cipher = Cipher.getInstance(DES);
		DESKeySpec ds = new DESKeySpec(key);
		SecureRandom sr = new SecureRandom();
		SecretKeyFactory skfactory = SecretKeyFactory.getInstance(DES);
		SecretKey skey = skfactory.generateSecret(ds);
		cipher.init(Cipher.DECRYPT_MODE, skey, sr);
		return cipher.doFinal(data);
	}

	// 解密
	public static String decrypt(String data, String key) throws Exception {
		return new String(decrypt(hex2byte(data.getBytes()), key.getBytes()));
	}

	private static String byte2hex(byte[] b) {
		StringBuilder hs = new StringBuilder();
		String stmp;
		for (int n = 0; b != null && n < b.length; n++) {
			stmp = Integer.toHexString(b[n] & 0XFF);
			if (stmp.length() == 1)
				hs.append(‘0‘);
			hs.append(stmp);
		}
		return hs.toString().toUpperCase();
	}

	private static byte[] hex2byte(byte[] b) {
		if ((b.length % 2) != 0)
			throw new IllegalArgumentException();
		byte[] b2 = new byte[b.length / 2];
		for (int n = 0; n < b.length; n += 2) {
			String item = new String(b, n, 2);
			b2[n / 2] = (byte) Integer.parseInt(item, 16);
		}
		return b2;
	}

}
时间: 2024-10-18 08:51:21

Java DES加密解密的相关文章

C# Java DES加密解密

c#代码: public class DESHelper    {          /// <summary>        /// DES加密算法        /// </summary>        /// <param name="encryptString">要加密的字符串</param>        /// <param name="sKey">加密码Key</param>  

des加密解密——java加密,php解密

最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混杂,好不容易测试在php这边测试加密和解密成功了.为确保安卓app端提交过来的加密参数能够解密出来,给定安卓人员一个字符串,让他们把des加密后的字符串给我,在php这边解密.结果一看,加密出来的字符串跟我这边加密出来的结果不一致,自然是解密不出来. 要来java的des算法代码,研究加密的过程,其

兼容PHP和Java的des加密解密代码分享

这篇文章主要介绍了兼容PHP和Java的des加密解密代码分享,适合如服务器是JAVA语言编写,客户端是PHP编写,并需要des加密解密的情况,需要的朋友可以参考下 php <?php class DES { var $key; var $iv; //偏移量 function DES($key, $iv=0) { $this->key = $key; if($iv == 0) { $this->iv = $key; } else { $this->iv = $iv; } } //加

Java DES 加密和解密

DES算法简介DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种:加密或解密. 项目中的加密和解密工具类: public class DesUtils { public final static String DES = "DES"; pub

DES加密解密字符串的JAVA实现(lp)

野火烧不尽,春风吹又生.众里寻他千百度,蓦然回首,那人却在灯火阑珊处.天作孽,犹可违,自作孽,不可活.山高月小,水落石出.晴川历历汉阳树,芳草萋萋鹦鹉洲. package test.des2.tt; /** * * 这个是真正实用的.修正了以前方法的只加密了前8位正确的bug. */ import java.security.*; import javax.crypto.*; public class DESPlus { private static String strDefaultKey =

JAVA使用DES加密解密

在使用DES加密解密的时候,遇到了一些问题,廖记一下.如有哪位大神亲临留言指点,不胜感激. 先上代码: public DESUtil() { } //密码,长度要是8的倍数 注意此处为简单密码 简单应用 要求不高时可用此密码 /*DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解.*/ private stati

DES加密解密-&gt;java实现

DES加密解密涉及到的JAVA类 Cipher 此类为加密和解密提供密码功能.它构成了 Java Cryptographic Extension (JCE) 框架的核心. 为创建 Cipher 对象,应用程序调用 Cipher 的 getInstance 方法并将所请求转换 的名称传递给它.还可以指定提供者的名称(可选). 转换 是一个字符串,它描述为产生某种输出而在给定的输入上执行的操作(或一组操作).转换始终包括加密算法的名称(例如,DES),后面可能跟有一个反馈模式和填充方案. 转换具有以

使用C# DES解密java DES加密的字符串

转自 microAllen 最近需要使用C#的DES解密工具类解密字符串,但是要解密的字符串是使用java进行DES加密的,去网上查了关于C#和java关于DES加密解密的资料,发现可以相互加密解密的时候,java进行DES加密一般都会写成如下:public static byte[] encrypt(String message, String key) throws Exception {     Cipher cipher = Cipher.getInstance("DES/CBC/PKC

java 实现 DES加密 解密算法

DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种:加密或解密.  DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果:如 Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果.在通信网络的两端,双方约定一致