我夕
前两篇分别讲了对称加密中两种简单的方式——基于代码直接加密与密钥存盘的方式;今天来看一下对称加密中的另一种方式——基于口令的加密与解密,就是根据您设定的密码来加密,这种方式跟前面的一样,也分为基于代码直接加密与密钥存盘的方式,现在为了方便,两种方式就一起写了不再分开写了。
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));
}
}
运行结果:
分享到:
相关推荐
将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 算法/密钥长度/默认密钥长度: 1.PBEWithMD5AndDES/56/56 2.PBEWithMD5AndTripleDES/112,168/168 ...
WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0,作者吴东升 常蕴秋,BlowfishTool.java封装同Blowfish对称加密算法有关的方法,包括了使用创建Blowfish密码,使用Blowfish加密、解密, 使用PBE(基于口令的...
文件校验2096.8 小结211第7章初等数据加密—对称加密算法2137.1 对称加密算法简述2137.2 数据加密标准—DES 2147.3 三重DES—DESede 2227.4 高级数据加密标准—AES 2277.5 国际数据加密标准—IDEA 2327.6 基于口令...
文件校验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 ...
由于限制,分开了 2 个文件,请大家一起下载在解压,请谅解《完全掌握加密解密实战超级手册》紧紧围绕软件的加密与解密来进行讲解,在详细讲述加密/解密技术的同时,还介绍了相应的实现原理,并配合案例分析,使读者...
42014.7.1 实现本地用户的帐户登录 42014.7.2 查询分析器的使用 42014.7.3 多功能密码破解软件 42114.8 加密解密网页与脚本文件 42314.8.1 网页与脚本的加密 42314.8.2 网页与脚本的解密 42814.9 专家点拨:常见问题...
A、加密包括对称加密和非对称加密两种 B、信息隐藏是加密的一种方法 C、如果没有信息加密的密钥,只要知道加密程序的细节就可以对信息进行加密 D、密钥的位数越多,信息的安全性就越高 可以认为数据的加密和解密是...
- 对文件进行对称加密存储到文件系统,禁止明文存储文件 【 *对称加密* *密钥管理(如何安全存储对称加密密钥)* *对称加密密文的PADDING问题* 】 - 系统对加密后文件进行数字签名 【 *数字签名(多种签名工作模式...
使用对称加密算法队要传输的信息(明文)进行加解密处理 C. 使用公开密钥密码体制对称加密密码体制的密钥进行加密后的通信 D. 对称密钥交换的安全信道是通过公开密钥密码体制来保证的 10. 在通信过程中,只采用...
使用对称加密算法队要传输的信息(明文)进行加解密处理 C. 使用公开密钥密码体制对称加密密码体制的密钥进行加密后的通信 D. 对称密钥交换的安全信道是通过公开密钥密码体制来保证的 10. 在通信过程中,只采用...
加解密双方使用同样的密钥 C.DES算法属于对称加密算法 D.相对于非对称加密算法,加解密处理速度比较快 8.相对于对称加密算法,非对称密钥加密算法() A.加密数据的速率较低 B.更适合于现有网络中对所传输数据...
对称加密算法的密钥易于管理 加解密双方使用同样的密钥 DES算法属于对称加密算法 D .相对于非对称加密算法,加解密处理速度比较快 相对于对称加密算法,非对称密钥加密算法( ) A .加密数据的速率较低 更适合于现有...
保证数据接受方收到的信息与发送方发送的信息 完全一致 确保数据数据是由合法实体发出的 以下算法中属于非对称算法的是( B ) DES RSA算法 IDEA 三重DES 在混合加密方式下,真正用来加解密通信过程中所传输数据...
实例38 Java字符串与文件的互转 88 实例39 截取带汉字的字符串 91 实例40 替换字符串中的部分字符 92 实例41 Java字符串之密码加密 93 实例42 正则表达式验证字符串 95 第7章 Java常用类 98 实例43 数字的舍入...
对称加密是常规的以口令为基础的技术,加密运算与解密运算使用同样的密钥。不对称加密,即加密密钥不同于解密密钥,加密密钥公之于众,谁都可以用,解密密钥只有解密人自己知道。 4、网络主机的操作系统安全和物理...
加密技术 加密技术种类 1 对称加密 2 非对称加密 网络金融安全全文共85页,当前为第14页。 加 密 技 术 对称密钥加密技术 也称密钥密码加密技术、私有密钥加密技术 特征 加密密钥和解密密钥相同,即: Ke=Kd=K 网络...
A RSA和对称加密算法 B Diffie-Hellman 和传统加密算法 C Elgamal 和传统加密算法 D RSA和 Elgamal 6. 在对称密钥系统中,依据加密方式的不一样又可分为: A. 分组密码方式和密钥序列方式 B. 分组密码方式和序列...
A RSA和对称加密算法 B Diffie-Hellman和传统加密算法 C Elgamal和传统加密算法 D RSA和Elgamal 在对称密钥体制中,根据加密方式的不同又可分为: A. 分组密码方式和密钥序列方式 B. 分组密码方式和序列密码方式 C....
消息加解密:采用D-H体制协商加密秘钥,用对称密码AES算法进行加解密。 消息摘要:使用MD5算法实现消息摘要认证功能,确保发送消息的完整性。 用户未读消息提醒:红点标注未读消息数目,并按最后发送消息时间排列...
消息加解密:采用D-H体制协商加密秘钥,用对称密码AES算法进行加解密。消息摘要:使用MD5算法实现消息摘要认证功能,确保发送消息的完整性。用户未读消息提醒:红点标注未读消息数目,并按最后发送消息时间排列好友...