关闭

Java对称加密算法DES[以及其他对称加密算法]

标签: 加密解密
1090人阅读 评论(0) 收藏 举报
分类:

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。

DES算法简介

DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

Java实现

package com.zzj.encryption;

import java.math.BigInteger;

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

/**
 * 对称加密DES算法
 * @author Administrator
 *
 */
public class DESTest {
	/** 算法名称 **/
	static final String ALGORITHM = "DES";
	/** 算法名称/加密模式/填充方式   **/
	static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";
	
	/** 密钥,getBytes的长度必须大于等于8 **/
	static final String SECRET_KEY = "!@#$%^&*";
	
	public static void main(String[] args) throws Exception {
		String data = "我是程序猿!";
		//加密
		String hex = encryption(data);
		System.out.println(hex);
		
		System.out.println("-----------------------------------------");
		// 解密
		String origin = decryption(hex);
		System.out.println(origin);
	}

	/**
	 * 加密,返回16进制的字符串
	 * @param data
	 * @return
	 * @throws Exception
	 */
	private static String encryption(String data) throws Exception{
		// 创建密钥
		DESKeySpec desKeySpec = new DESKeySpec(SECRET_KEY.getBytes("UTF-8"));
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
		SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
		// 加密
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
		cipher.init(Cipher.ENCRYPT_MODE, secretKey);
		byte[] bs = cipher.doFinal(data.getBytes("UTF-8"));
		// 编码成16进制字符串
		BigInteger bi = new BigInteger(1, bs);
		return bi.toString(16);
	}
	
	/**
	 * 解密
	 * @param hex
	 * @return
	 * @throws Exception
	 */
	private static String decryption(String hex) throws Exception {
		// 解码16进制字符串
		BigInteger bi = new BigInteger(hex, 16);
		byte[] bs = bi.toByteArray();// 该数组包含此 BigInteger 的二进制补码表示形式。
		byte[] originBs = new byte[bs.length - 1];
		byte[] target = bs;
		if (bs[0] == 0) {
			System.out.println("去补码...");
			System.arraycopy(bs, 1, originBs, 0, originBs.length); // 去掉补码
			target = originBs;
		}
		// 创建密钥
		DESKeySpec desKeySpec = new DESKeySpec(SECRET_KEY.getBytes("UTF-8"));
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
		SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
		// 解密
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
		cipher.init(Cipher.DECRYPT_MODE, secretKey);
		byte[] decryptionBs = cipher.doFinal(target);
		return new String(decryptionBs, "UTF-8");
	}
}
结果:

33433fde064c18210cefaeae2bc795619b5fc001aeaef528
-----------------------------------------
我是程序猿!

DES是美国国家标准研究所提出的算法。des的56位的密钥已经形成安全隐患,在1998年之后就很少被采用。

其他对称加密算法

三重DES---DESede

DESede是由DES对称加密算法改进后的一种对称加密算法。使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。

不过desede算法处理速度较慢,密钥计算时间较长,加密效率不高问题使得对称加密算法的发展不容乐观。

public static final String KEY_ALGORITHM = "DESede";  

public static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";  

AES算法

DES的不安全性以及DESede算法的低效,催生了这个AES算法(advanced Encryption Standard)。这个算法比DES要快,安全性高。密钥建立时间短、灵敏性好、内存需求低,在各个领域应用广泛。

目前,AES通常用于移动通信系统以及一些软件的安全外壳。还有一些无线路由器中也是用AES算法构建加密协议。

public static final String KEY_ALGORITHM = "AES";  

public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";




0
0
查看评论

Java 加密 AES 对称加密算法

【AES】 一种对称加密算法,DES的取代者。 加密相关文章见: 【代码】 代码比较多,有一部分非本文章内容代码,具体自己看吧。 package com.uikoo9.util.encrypt; import java.math.BigInteger; import java.security...
  • uikoo9
  • uikoo9
  • 2014-06-01 20:38
  • 74477

Java加密-对称加密算法

本位内容来自JAVA实现对称加密Java加密-对称加密算法对称加密算法是加密密钥等于解密密钥。常见的对称加密算法有: DES,3DES AES PBE IDEA DESDES(Data Encryption Standard)数据加密标准jdk方式实现DES的加解密public static voi...
  • winfredzen
  • winfredzen
  • 2016-12-12 10:00
  • 1069

对称加密与非对称加密理解和非对称加密的java例子

对称加密与非对称加密理解和非对称加密的java例子 1.对称加密:一般小于256 bit的密钥,密钥越大越安全,但是解密和加密时间越长。加密和解密都是用的相同的密钥,快速简单 2.非对称加密:有公钥和私钥,只有私钥才能打开公钥,比如:你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么...
  • qq_31968809
  • qq_31968809
  • 2017-03-11 14:23
  • 645

Java安全之对称加密、非对称加密、数字签名

Java中加密分为两种方式一个是对称加密,另一个是非对称加密。对称加密是因为加密和解密的钥匙相同,而非对称加密是加密和解密的钥匙不同。 对称加密与非对称加密的区别: 对称加密称为密钥加密,速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道密钥。 非对称加密称为公钥加密,算法更加复杂,速度...
  • furongkang
  • furongkang
  • 2011-10-17 19:04
  • 9402

java实现对称加密AES和DES的加密、解密

目前主流的加密方式有:1、对称加密:AES、DES      2、非对称加密:RSA、DSA。         本文主要讲解java实现调用AES/DES加密算...
  • zmx729618
  • zmx729618
  • 2016-11-01 11:41
  • 4249

Java中的对称加密算法

在Java中,对于加密密钥和解密密钥相同的加密我们称之为非对称加密,其中主要有DES,3DES和AES加密。 DES加密 package com.example.asiatravel.learndes.util; import android.util.Log; import javax.cry...
  • kuangxiaoguo0123
  • kuangxiaoguo0123
  • 2016-09-14 21:58
  • 1180

Java对称加密,非对称加密,不可逆加密Util

对称加密采用ASC加密算法package com.encrypt.impl;import java.security.SecureRandom;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.cry...
  • u013129944
  • u013129944
  • 2017-03-17 17:10
  • 1390

分享Java常用几种加密算法(四种)

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。本文给大家分享java常用的几种加密算法,需要的朋友可以参考下 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和...
  • It_BeeCoder
  • It_BeeCoder
  • 2017-05-09 17:02
  • 1016

java实现对称加密AES与非对称加密RSA算法

AES高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。 JDK AES实现 1.实现支持 AES理论上支持128,...
  • cuiyaoqiang
  • cuiyaoqiang
  • 2016-03-16 09:38
  • 2683

java学习笔记之:java对称加密

所谓对称加密,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。 加密的安全...
  • true100
  • true100
  • 2015-10-28 13:28
  • 1366
    个人资料
    • 访问:1315686次
    • 积分:12315
    • 等级:
    • 排名:第1402名
    • 原创:293篇
    • 转载:144篇
    • 译文:1篇
    • 评论:113条
    最新评论