加密解密的背景, 原理和用法在代码注释里
代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.swing.JFileChooser;
/**
* (1)jdk版本:1.40以上
* (2)加密背景:文件加密 加密方法:三重des加密
* (3)加密解密原理:
* 加密时,对输入的48位秘钥,前两位,中间两位和后44位,分别求md5值,
* 先用第一个md5值加密,再用第二个md5值加密,最后用第三个md5值加密,,共三重加密,
* 解密时,对输入的byte数组即加密后的文件, 先用第三个md5值解密,再用第二个md5值解密,再用第一个md5值解密,这样返回的就是解密后的文件
* md5值的获取用 java.security 包里的类
* 加密解密用的是 javax.crypto 包里面的类
* (4)加密解密过程用法:
* 在console 输入秘钥 AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746
* 再输入需要加密的文件名 def.txt(文件路径是相对路径是相对这个的路径 D:\***\EclipseWorkingspace\WorkspaceLearning\jsp_api)
* 再输入en,即可实现加密
* 在以上路径下出现加密文件 en_def.txt,
* 解密过程方法:输入秘钥 AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746
* 再输入需要解密的文件名 en_def.txt
* 再输入de,即可实现解密
*
*
*/
public class fileencrypter {
/**
* 加密函数 输入: 要加密的文件,密码(由0-F组成,共48个字符,表示3个16位的密码)如:
* AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中:
* AD67EA2F3BE6E5AD DES密码一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三
* 输出:对输入的文件加密后,保存到同一文件夹下增加了 "en+原文件名" 为扩展名的文件中。
*
* param:
* sKey 是三个md5值的字符串拼接, 一共48位
*/
private void encrypt(File fileIn, String sKey) {
try {
if (sKey.length() == 48) {
byte[] bytK1 =