`
daibalusu
  • 浏览: 344026 次
文章分类
社区版块
存档分类
最新评论

java 对称加密——基于口令的加密与解密

 
阅读更多

我夕

前两篇分别讲了对称加密中两种简单的方式——基于代码直接加密与密钥存盘的方式;今天来看一下对称加密中的另一种方式——基于口令的加密与解密,就是根据您设定的密码来加密,这种方式跟前面的一样,也分为基于代码直接加密与密钥存盘的方式,现在为了方便,两种方式就一起写了不再分开写了。

package com.study.security2;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

/**
 * 
 * @ClassName: SimpleTest3
 * @Description: 基于口令的加密与解密
 * @author 我夕
 * @date 2012-5-16
 */
public class SimpleTest3 {

	public static void main(String[] args) throws Exception {

		//直接在代码中进行加密与解密的方式
		simpleSecret();

		// 简单密钥加密2,将密钥写到磁盘
		simpleSecret2();

	}

	/**
	 * 直接在代码中进行加密与解密的方式
	 */
	public static void simpleSecret() throws Exception {
		// PBEWithMD5AndDES是一个算法的名称,关于其他具体的算法名称大家可以查看文档
		Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");// 创建对象实例
		// SecretKeyFactory.getInstance("PBEWithMD5AndDES")中的参数必须与Cipher.getInstance("PBEWithMD5AndDES")相同
		// PBEKeySpec(char[] password) 长度必须为8个字节
		SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(new PBEKeySpec("12345678".toCharArray()));
		// PBEParameterSpec 是PKCS #5 标准中所定义的基于密码的加密法构造一个参数集合
		PBEParameterSpec parameterSpec = new PBEParameterSpec(new byte[] { 1,2, 3, 4, 5, 6, 7, 8 }, 10);
		cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);
		// 初始化
		byte[] result = cipher.doFinal("hello java !".getBytes());
		System.out.println("加密后的数据:"+new String(result));

		// 解密
		cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec);
		System.out.println("解密后的数据:"+new String(cipher.doFinal(result)));
	}

	/**
	 * 密钥数据写到磁盘的方式
	 */
	public static void simpleSecret2() throws Exception {

		// 密钥加密
		Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");// 创建对象实例
		SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(new PBEKeySpec("22345678".toCharArray()));

		// 将产生的密钥写到磁盘上
		FileOutputStream foskey = new FileOutputStream("myKey.key");
		ObjectOutputStream oos = new ObjectOutputStream(foskey);
		oos.writeObject(key);
		oos.close();
		foskey.close();

		PBEParameterSpec parameterSpec = new PBEParameterSpec(new byte[] { 1,2, 3, 4, 5, 6, 7, 8 }, 10);
		cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);
		// 初始化
		byte[] result = cipher.doFinal("How are you !".getBytes());
		System.out.println("加密后的数据:"+new String(result));

		// 将加密后的数据写到磁盘上
		FileOutputStream fosData = new FileOutputStream("myData.data");
		fosData.write(result);
		fosData.close();

		// **密钥解密*//
		simpleDecrypt();
	}

	// 密钥解密方法一
	public static void simpleDecrypt() throws Exception {

		// 从磁盘读进密钥
		FileInputStream fiskey = new FileInputStream("myKey.key");
		ObjectInputStream oiskey = new ObjectInputStream(fiskey);
		Key key = (Key) oiskey.readObject();
		oiskey.close();
		fiskey.close();

		// 从磁盘读进数据
		FileInputStream fisDat = new FileInputStream("myData.data");
		// 读二进制数据
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		int len = 0;
		byte[] data = new byte[1024];
		while ((len = fisDat.read(data)) != -1) {
			arrayOutputStream.write(data, 0, len);
		}
		byte[] result = arrayOutputStream.toByteArray();
		arrayOutputStream.close();
		fisDat.close();

		Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");// 创建对象实例
		PBEParameterSpec parameterSpec = new PBEParameterSpec(new byte[] { 1,2, 3, 4, 5, 6, 7, 8 }, 10);
		cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec);
		// 初始化
		byte[] data2 = cipher.doFinal(result);
		System.out.println("解密后的数据:"+new String(data2));

	}

}


运行结果:

分享到:
评论

相关推荐

    PBE是一种基于口令的加密算法,使用口令代替其他对称加密算法中的密钥,其特点在于口令由用户自己掌管,不借助任何物理媒体;

    将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 算法/密钥长度/默认密钥长度: 1.PBEWithMD5AndDES/56/56 2.PBEWithMD5AndTripleDES/112,168/168 ...

    Java Jct 加密解密工具包源码.rar

    WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java封装同Blowfish对称加密算法有关的方法,包括了使用创建Blowfish密码,使用Blowfish加密、解密, 使用PBE(基于口令的...

    Java加密与解密的艺术

    文件校验2096.8 小结211第7章初等数据加密—对称加密算法2137.1 对称加密算法简述2137.2 数据加密标准—DES 2147.3 三重DES—DESede 2227.4 高级数据加密标准—AES 2277.5 国际数据加密标准—IDEA 2327.6 基于口令...

    Java加密与解密的艺术配书源代码

    文件校验209 6.8 小结211 第7章初等数据加密—对称加密算法213 7.1 对称加密算法简述213 7.2 数据加密标准—DES 214 7.3 三重DES—DESede 222 7.4 高级数据加密标准—AES 227 7.5 国际数据加密标准—IDEA 232 7.6 ...

    完全掌握加密解密实战超级手册.z01

    由于限制,分开了 2 个文件,请大家一起下载在解压,请谅解《完全掌握加密解密实战超级手册》紧紧围绕软件的加密与解密来进行讲解,在详细讲述加密/解密技术的同时,还介绍了相应的实现原理,并配合案例分析,使读者...

    完全掌握加密解密实战超级手册.zip02

    42014.7.1 实现本地用户的帐户登录 42014.7.2 查询分析器的使用 42014.7.3 多功能密码破解软件 42114.8 加密解密网页与脚本文件 42314.8.1 网页与脚本的加密 42314.8.2 网页与脚本的解密 42814.9 专家点拨:常见问题...

    黄淮学院\考试题\2010-2011

    A、加密包括对称加密和非对称加密两种 B、信息隐藏是加密的一种方法 C、如果没有信息加密的密钥,只要知道加密程序的细节就可以对信息进行加密 D、密钥的位数越多,信息的安全性就越高 可以认为数据的加密和解密是...

    一个基于Vue和springboot+mybatisplus实现的文件云盘管理系统+源代码+文档说明

    - 对文件进行对称加密存储到文件系统,禁止明文存储文件 【 *对称加密* *密钥管理(如何安全存储对称加密密钥)* *对称加密密文的PADDING问题* 】 - 系统对加密后文件进行数字签名 【 *数字签名(多种签名工作模式...

    计算机网络安全试题-《网络安全与管理(第二版)》网络安全试题(2).doc

    使用对称加密算法队要传输的信息(明文)进行加解密处理 C. 使用公开密钥密码体制对称加密密码体制的密钥进行加密后的通信 D. 对称密钥交换的安全信道是通过公开密钥密码体制来保证的 10. 在通信过程中,只采用...

    计算机网络安全试题-《网络安全与管理(第二版)》网络安全试题(1).doc

    使用对称加密算法队要传输的信息(明文)进行加解密处理 C. 使用公开密钥密码体制对称加密密码体制的密钥进行加密后的通信 D. 对称密钥交换的安全信道是通过公开密钥密码体制来保证的 10. 在通信过程中,只采用...

    【9A文】计算机网络安全试题-《网络安全与管理(第二版)》网络安全试题.doc

    加解密双方使用同样的密钥 C.DES算法属于对称加密算法 D.相对于非对称加密算法,加解密处理速度比较快 8.相对于对称加密算法,非对称密钥加密算法() A.加密数据的速率较低 B.更适合于现有网络中对所传输数据...

    计算机网络安全试题-《网络安全与管理》网络安全试题.docx

    对称加密算法的密钥易于管理 加解密双方使用同样的密钥 DES算法属于对称加密算法 D .相对于非对称加密算法,加解密处理速度比较快 相对于对称加密算法,非对称密钥加密算法( ) A .加密数据的速率较低 更适合于现有...

    《计算机网络安全》试题及答案.docx

    保证数据接受方收到的信息与发送方发送的信息 完全一致 确保数据数据是由合法实体发出的 以下算法中属于非对称算法的是( B ) DES RSA算法 IDEA 三重DES 在混合加密方式下,真正用来加解密通信过程中所传输数据...

    JAVA 范例大全 光盘 资源

    实例38 Java字符串与文件的互转 88 实例39 截取带汉字的字符串 91 实例40 替换字符串中的部分字符 92 实例41 Java字符串之密码加密 93 实例42 正则表达式验证字符串 95 第7章 Java常用类 98 实例43 数字的舍入...

    计算机网络安全与管理(1).docx

    对称加密是常规的以口令为基础的技术,加密运算与解密运算使用同样的密钥。不对称加密,即加密密钥不同于解密密钥,加密密钥公之于众,谁都可以用,解密密钥只有解密人自己知道。 4、网络主机的操作系统安全和物理...

    网络金融安全.pptx

    加密技术 加密技术种类 1 对称加密 2 非对称加密 网络金融安全全文共85页,当前为第14页。 加 密 技 术 对称密钥加密技术 也称密钥密码加密技术、私有密钥加密技术 特征 加密密钥和解密密钥相同,即: Ke=Kd=K 网络...

    网络安全试题(1).doc

    A RSA和对称加密算法 B Diffie-Hellman 和传统加密算法 C Elgamal 和传统加密算法 D RSA和 Elgamal 6. 在对称密钥系统中,依据加密方式的不一样又可分为: A. 分组密码方式和密钥序列方式 B. 分组密码方式和序列...

    网络安全试题完整版.docx

    A RSA和对称加密算法 B Diffie-Hellman和传统加密算法 C Elgamal和传统加密算法 D RSA和Elgamal 在对称密钥体制中,根据加密方式的不同又可分为: A. 分组密码方式和密钥序列方式 B. 分组密码方式和序列密码方式 C....

    安全技术课程设计基于python的安全即时通讯系统.zip

    消息加解密:采用D-H体制协商加密秘钥,用对称密码AES算法进行加解密。 消息摘要:使用MD5算法实现消息摘要认证功能,确保发送消息的完整性。 用户未读消息提醒:红点标注未读消息数目,并按最后发送消息时间排列...

    安全技术课程设计基于python的安全即时通讯系统全部资料.zip

    消息加解密:采用D-H体制协商加密秘钥,用对称密码AES算法进行加解密。消息摘要:使用MD5算法实现消息摘要认证功能,确保发送消息的完整性。用户未读消息提醒:红点标注未读消息数目,并按最后发送消息时间排列好友...

Global site tag (gtag.js) - Google Analytics