Java CBC解密

概要:

本实例演示了使用CBC解密方式以及初始向量进行解密的编程步骤。

| |目录

技术要点

CBC方式的解密的技术要点如下:

  • 取出向量。

  • 密文和密钥的获取。

  • 获取密码器。

代码实现

说明:key1.dat 文件的获取请参考Java 创建对称密钥

package net.xsoftlab.baike;

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;

public class DECCBC {
	public static void main(String args[]) throws Exception {
		String path = System.getProperty("user.dir") + "//key1.dat"; // 得到密钥的路径
		FileInputStream in = new FileInputStream("EncCBC.dat");// 获取密文
		byte[] rand = new byte[8];
		in.read(rand);
		IvParameterSpec iv = new IvParameterSpec(rand);// 获取初始向量
		int num = in.available();
		byte[] ctext = new byte[num];
		in.read(ctext);
		FileInputStream in1 = new FileInputStream(path);// 获取密钥
		ObjectInputStream b = new ObjectInputStream(in1);
		Key k = (Key) b.readObject();
		// 获取密码器,执行加密
		Cipher cp = Cipher.getInstance("DESede/CBC/PKCS5Padding");
		cp.init(Cipher.DECRYPT_MODE, k, iv);
		byte[] ptext = cp.doFinal(ctext);
		String str = new String(ptext, "UTF8");
		System.out.println("CBC解密后的字符串为:");
		System.out.println(str);
	}
}

程序解读

  1. 在本程序中获取初始向量可以使用文件输入流的read()方法从文件EncCBC.dat中读取8个字节的对应初始向量的随机数,并用其创建IvParameterSpec对象。

  2. 由于EncCBC.dat中剩余部分为加密结果,因此使用文件输入流的available()方法判断剩余字节的数量,并创建相应大小的字节数组,读入数据。密钥必须和加密时所用的密钥相同。

  3. 进行解密的操作与加密的相同,只是在初始化密码器时使用Cipher.DECRYPT_MODE,表明进行解密。

评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消