博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对称加密整个过程
阅读量:2161 次
发布时间:2019-05-01

本文共 2786 字,大约阅读时间需要 9 分钟。

对称加密

对称密码技术:发件人和收件人使用其共同拥有的单个密钥 ,这种密钥既用于加密,也用于解密,叫做机密密钥(也称为对称密钥或会话密钥)。

    能够提供信息机密性(没有密钥信息不能被解密)、完整性(被改变的信息不能被解密)的服务。

    对称式密码学又称:单钥密码学、秘密密钥密码学、会话密钥密码学、私钥密码学、共享秘钥密码学

常见的对称式加密技术

 DES(数据加密标准):分组式加密,算法源于Lucifer,作为NIST对称式加密标准;64位(有效位56位、校验8位),分组算法

  3DES:128位,分组算法

    IDEA(国际数据加密算法):128位,比DES快,分组算法

    Blowfish:32-448位,算法公开,分组算法

    RC4:流密码,密钥长度可变

    RC5:分组密码,密钥长度可变,最大2048位

    Rijndael:128位/196位/256位

    AES(高级加密标准):DES升级版,算法出自Rinjindael

package com.learn.des;import java.security.SecureRandom;import javax.crypto.spec.DESKeySpec;import javax.crypto.SecretKeyFactory;import javax.crypto.SecretKey;import javax.crypto.Cipher;/** * DES加密介绍 DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,   *   后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力, * 24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现 。   *   注意:DES加密和解密过程中,密钥长度都必须是8的倍数 */public class DES {	public DES() {	}	// 测试	public static void main(String args[]) throws Exception {		// 待加密内容		String str = "leon666";		// 密码,长度要是8的倍数 密钥随意定		String password = "95880288";		byte[] encrypt = encrypt(str.getBytes(), password);		System.out.println("加密后:" + new String(encrypt));		// 解密		byte[] decrypt = decrypt(encrypt, password);		System.out.println("解密后:" + new String(decrypt));	}	/**	 * 加密	 * 	 * @param datasource	 *            byte[]	 * @param password	 *            String	 * @return byte[]	 */	public static byte[] encrypt(byte[] datasource, String password) {		try {			SecureRandom random = new SecureRandom();			DESKeySpec desKey = new DESKeySpec(password.getBytes());			// 创建一个密匙工厂,然后用它把DESKeySpec转换成			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");			SecretKey securekey = keyFactory.generateSecret(desKey);			// Cipher对象实际完成加密操作			Cipher cipher = Cipher.getInstance("DES");			// 用密匙初始化Cipher对象,ENCRYPT_MODE用于将 Cipher 初始化为加密模式的常量			cipher.init(Cipher.ENCRYPT_MODE, securekey, random);			// 现在,获取数据并加密			// 正式执行加密操作			return cipher.doFinal(datasource); // 按单部分操作加密或解密数据,或者结束一个多部分操作		} catch (Throwable e) {			e.printStackTrace();		}		return null;	}	/**	 * 解密	 * 	 * @param src	 *            byte[]	 * @param password	 *            String	 * @return byte[]	 * @throws Exception	 */	public static byte[] decrypt(byte[] src, String password) throws Exception {		// DES算法要求有一个可信任的随机数源		SecureRandom random = new SecureRandom();		// 创建一个DESKeySpec对象		DESKeySpec desKey = new DESKeySpec(password.getBytes());		// 创建一个密匙工厂		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 返回实现指定转换的																			// Cipher																			// 对象		// 将DESKeySpec对象转换成SecretKey对象		SecretKey securekey = keyFactory.generateSecret(desKey);		// Cipher对象实际完成解密操作		Cipher cipher = Cipher.getInstance("DES");		// 用密匙初始化Cipher对象		cipher.init(Cipher.DECRYPT_MODE, securekey, random);		// 真正开始解密操作		return cipher.doFinal(src);	}}

 

转载地址:http://mbkzb.baihongyu.com/

你可能感兴趣的文章
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>
【Pyton】【小甲鱼】魔法方法
查看>>
单元测试需要具备的技能和4大阶段的学习
查看>>
【Loadrunner】【浙江移动项目手写代码】代码备份
查看>>
Python几种并发实现方案的性能比较
查看>>
[Jmeter]jmeter之脚本录制与回放,优化(windows下的jmeter)
查看>>
Jmeter之正则
查看>>