CBC方式的解密与加密
一、创建对称密钥
现代密码算法的过程非常复杂,加密和解密使用相同的密钥,称为对称密钥算法。Java中已经提供了常用的加密算法,我们不需要了解算法的细节就可以直接使用这些算法实现加密。每一种算法所用的密钥都有所不同,本实例演示如何运用Java中提供的方法创建对称密钥,并通过对象序列化方式保存在文件中。
1.原理
首先获取密钥生成器,然后密钥的生成,最后对密钥进行保存。
2.语法
-
Java的 Keygeneratori类中提供了创建对称密钥的方法。KeyGenerator类预定义了一个静态方法 getlnstanceo,通过它获得KeyGenerator类型的对象。DES是目前最常用的对称加密算法,但安全性较差。在本程序中用于获取密钥生成器的代码如下所示:
KeyGenerator kg =KeyGenerator.getInstance(“DESede”) //获取密钥生成器 -
初始化密钥生成器一般是指定密钥的长度。如果不进行初始化,系统会根据算法自动使用默认的密钥长度。在本程序中用于初始化密钥生成器的代码如下所示:
Kg.init(168); //初始化密钥生成器 -
通过 KeyGenerator类型的对象中 generateKey()方法可以获得密钥。其类型为SecretKey类型,可用于以后的加密和解密。在本程序中用于生成密钥的代码如下所示:
SecretKeysk=kg. generateKey( );
3.代码
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class rw36 {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
KeyGenerator kg =KeyGenerator.getInstance("DESede");//获取密钥生成器
kg.init(168);//初始化密钥生成器
SecretKey sk=kg.generateKey();//生成密钥
FileOutputStream fos=new FileOutputStream("key1.dat");//将密钥保存在key1.dat文件中
ObjectOutputStream b=new ObjectOutputStream(fos);
b.writeObject(sk);
}
}
二、CBC方式的加密
CBC使用一个8个字节的随机数(称为初始向量,IV)来加密第一个分组,然后使用得到的密文加密第二个分组,加密第二个分组得到的密文再加密第三个分组,……。这样,即使两个分组相同,得到的密文也不同。本实例演示了使用CBC加密方式以及初始向量进行加密的编程步骤。
1.原理
- 生成密钥。
- 生成初始向量。
- 获取密码器。
- 初始化密码器,并执行加密。
2.语法
- 在本程序主要是通过下面的语句来获取密钥:
FileinputStrean f1=nev FileInputStream(path);//获取密钥ObjectInputStream b=new ObjectInputstream(f1);//创建对象输入流