DES加密
资源读取类
package
com.crypto.encrypt;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ResourceBundle;
import java.util.Locale;
/**
* 资源读取类
*/
public class Util {
private static ResourceBundle resources = null ;
/**
* 初始化资源
*/
static {
new Util();
}
public Util() {
resources = ResourceBundle.getBundle(
" resource.algorithm " ,
Locale.getDefault());
}
/**
* 读取源文件内容
* @param filename String 文件路径
* @throws IOException
* @return byte[] 文件内容
*/
public static byte [] readFile(String filename) throws IOException {
File file = new File(filename);
if (filename == null || filename.equals( "" ))
{
throw new NullPointerException( " 无效的文件路径 " );
}
long len = file.length();
byte [] bytes = new byte [( int )len];
BufferedInputStream bufferedInputStream = new BufferedInputStream( new FileInputStream(file));
int r = bufferedInputStream.read( bytes );
if (r != len)
throw new IOException( " 读取文件不正确 " );
bufferedInputStream.close();
return bytes;
}
/**
* 将加密的数据写入文件
* @param data byte[]
* @throws IOException
*/
public static void writeFile( byte [] data,String filename) throws IOException {
File file = new File(filename);
file.getParentFile().mkdirs();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( new FileOutputStream(file));
bufferedOutputStream.write(data);
bufferedOutputStream.close();
}
/**
* 从jar文件里读取class
* @param filename String
* @throws IOException
* @return byte[]
*/
public byte [] readFileJar(String filename) throws IOException {
BufferedInputStream bufferedInputStream = new BufferedInputStream(getClass().getResource(filename).openStream());
int len = bufferedInputStream.available();
byte [] bytes = new byte [len];
int r = bufferedInputStream.read(bytes);
if (len != r)
{
bytes = null ;
throw new IOException( " 读取文件不正确 " );
}
bufferedInputStream.close();
return bytes;
}
/**
* 获得密码生成法则
* @return String
*/
public static String getAlgorithm()
{
return resources.getString( " algorithm " );
}
/**
* 获得值
* @param skey String
* @return String
*/
public static String getValue(String skey)
{
return resources.getString(skey);
}
}
import java.io.BufferedInputStream;
import java.io.File;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ResourceBundle;
import java.util.Locale;
/**
* 资源读取类
*/
public class Util {
private static ResourceBundle resources = null ;
/**
* 初始化资源
*/
static {
new Util();
}
public Util() {
resources = ResourceBundle.getBundle(
" resource.algorithm " ,
Locale.getDefault());
}
/**
* 读取源文件内容
* @param filename String 文件路径
* @throws IOException
* @return byte[] 文件内容
*/
public static byte [] readFile(String filename) throws IOException {
File file = new File(filename);
if (filename == null || filename.equals( "" ))
{
throw new NullPointerException( " 无效的文件路径 " );
}
long len = file.length();
byte [] bytes = new byte [( int )len];
BufferedInputStream bufferedInputStream = new BufferedInputStream( new FileInputStream(file));
int r = bufferedInputStream.read( bytes );
if (r != len)
throw new IOException( " 读取文件不正确 " );
bufferedInputStream.close();
return bytes;
}
/**
* 将加密的数据写入文件
* @param data byte[]
* @throws IOException
*/
public static void writeFile( byte [] data,String filename) throws IOException {
File file = new File(filename);
file.getParentFile().mkdirs();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( new FileOutputStream(file));
bufferedOutputStream.write(data);
bufferedOutputStream.close();
}
/**
* 从jar文件里读取class
* @param filename String
* @throws IOException
* @return byte[]
*/
public byte [] readFileJar(String filename) throws IOException {
BufferedInputStream bufferedInputStream = new BufferedInputStream(getClass().getResource(filename).openStream());
int len = bufferedInputStream.available();
byte [] bytes = new byte [len];
int r = bufferedInputStream.read(bytes);
if (len != r)
{
bytes = null ;
throw new IOException( " 读取文件不正确 " );
}
bufferedInputStream.close();
return bytes;
}
/**
* 获得密码生成法则
* @return String
*/
public static String getAlgorithm()
{
return resources.getString( " algorithm " );
}
/**
* 获得值
* @param skey String
* @return String
*/
public static String getValue(String skey)
{
return resources.getString(skey);
}
}
生成密钥
package
com.crypto.encrypt;
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
import java.security.NoSuchAlgorithmException;
import javax.crypto.SecretKey;
import java.io. * ;
public class CreateKey {
String filename = "" ;
public CreateKey() {
}
/**
* 获得密匙字节内容
* @throws IOException
* @return byte[]
*/
public byte [] getKeyByte() throws IOException {
byte [] bytes = Util.readFile(filename);
return bytes;
}
public void CreateKeyFile(String filename) throws IOException,
NoSuchAlgorithmException {
this .filename = filename;
if (filename == null || filename.equals( "" ))
{
throw new NullPointerException( " 无效的文件路径 " );
}
createKey();
}
/**
* 生成密匙
* @throws NoSuchAlgorithmException
* @throws IOException
*/
private void createKey() throws NoSuchAlgorithmException, IOException {
SecureRandom secureRandom = new SecureRandom();
// 为我们选择的DES算法生成一个KeyGenerator对象
KeyGenerator kg = KeyGenerator.getInstance(Util.getValue( " algorithm " ));
kg.init(secureRandom);
// 生成密钥
SecretKey key = kg.generateKey();
// 将密钥数据保存为文件供以后使用
Util.writeFile(key.getEncoded(),filename);
}
/**
* 获得密匙文件路径
* @return String
*/
public String getKeyFilePath()
{
return filename;
}
}
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
import java.security.NoSuchAlgorithmException;
import javax.crypto.SecretKey;
import java.io. * ;
public class CreateKey {
String filename = "" ;
public CreateKey() {
}
/**
* 获得密匙字节内容
* @throws IOException
* @return byte[]
*/
public byte [] getKeyByte() throws IOException {
byte [] bytes = Util.readFile(filename);
return bytes;
}
public void CreateKeyFile(String filename) throws IOException,
NoSuchAlgorithmException {
this .filename = filename;
if (filename == null || filename.equals( "" ))
{
throw new NullPointerException( " 无效的文件路径 " );
}
createKey();
}
/**
* 生成密匙
* @throws NoSuchAlgorithmException
* @throws IOException
*/
private void createKey() throws NoSuchAlgorithmException, IOException {
SecureRandom secureRandom = new SecureRandom();
// 为我们选择的DES算法生成一个KeyGenerator对象
KeyGenerator kg = KeyGenerator.getInstance(Util.getValue( " algorithm " ));
kg.init(secureRandom);
// 生成密钥
SecretKey key = kg.generateKey();
// 将密钥数据保存为文件供以后使用
Util.writeFile(key.getEncoded(),filename);
}
/**
* 获得密匙文件路径
* @return String
*/
public String getKeyFilePath()
{
return filename;
}
}
加密
package
com.crypto.encrypt;
import java.security.SecureRandom;
import java.io. * ;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.Cipher;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.lang.reflect.Constructor;
import java.security.spec.KeySpec;
import java.lang.reflect.InvocationTargetException;
public class EncryptData {
private String keyfile = null ;
public EncryptData() {
}
public EncryptData(String keyfile) {
this .keyfile = keyfile;
}
/**
* 加密文件
* @param filename String 源路径
* @param filenamekey String 加密后的路径
*/
public void createEncryptData(String filename,String filenamekey) throws
IllegalStateException, IllegalBlockSizeException, BadPaddingException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InvalidKeyException, IOException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IllegalStateException, IllegalBlockSizeException,
BadPaddingException, NoSuchPaddingException, InvalidKeySpecException,
NoSuchAlgorithmException, InvalidKeyException, IOException {
// 验证keyfile
if (keyfile == null || keyfile.equals( "" ))
{
throw new NullPointerException( " 无效的key文件路径 " );
}
encryptData(filename,filenamekey);
}
/**
* 加密类文件
* @param filename String 原始的类文件
* @param encryptfile String 加密后的类文件
*/
private void encryptData(String filename,String encryptfile) throws IOException, InvalidKeyException,
NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException,
NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException,
IllegalStateException, ClassNotFoundException, SecurityException,
NoSuchMethodException, InvocationTargetException,
IllegalArgumentException, IllegalAccessException, InstantiationException {
// 载入待加密的文件
byte data[] = Util.readFile(filename);
// 执行加密操作
byte encryptedClassData[] = getencryptData(data);
// 保存加密后的文件,覆盖原有的类文件。
Util.writeFile(encryptedClassData,encryptfile);
}
/**
* 直接获得加密数据
* @param bytes byte[]
* @return byte[]
*/
public byte [] createEncryptData( byte [] bytes) throws IllegalStateException,
IllegalBlockSizeException, BadPaddingException, InvalidKeyException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InstantiationException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IOException {
bytes = getencryptData(bytes);
return bytes;
}
/**
* 加密业务方法
* @param bytes byte[] 待加密数据
* @return byte[] 加密后数据
*/
private byte [] getencryptData( byte [] bytes) throws IOException,
ClassNotFoundException, SecurityException, NoSuchMethodException,
InvocationTargetException, IllegalArgumentException,
IllegalAccessException, InstantiationException, NoSuchAlgorithmException,
InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException,
InvalidKeyException, BadPaddingException, IllegalBlockSizeException,
IllegalStateException {
// 产生一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从密钥文件key Filename中得到密钥数据
byte [] rawKeyData = Util.readFile(keyfile);
// 从原始密钥数据创建DESKeySpec对象
Class classkeyspec = Class.forName(Util.getValue( " keyspec " ));
Constructor constructor = classkeyspec.getConstructor( new Class[]{ byte []. class });
KeySpec dks = (KeySpec)constructor.newInstance( new Object[]{rawKeyData});
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(Util.getAlgorithm());
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(Util.getAlgorithm());
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
// 执行加密操作
bytes = cipher.doFinal(bytes);
// 返回字节数组
return bytes;
}
/**
* 设置key文件路径
* @param keyfile String
*/
public void setKeyFile(String keyfile)
{
this .keyfile = keyfile;
}
}
import java.security.SecureRandom;
import java.io. * ;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.Cipher;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.lang.reflect.Constructor;
import java.security.spec.KeySpec;
import java.lang.reflect.InvocationTargetException;
public class EncryptData {
private String keyfile = null ;
public EncryptData() {
}
public EncryptData(String keyfile) {
this .keyfile = keyfile;
}
/**
* 加密文件
* @param filename String 源路径
* @param filenamekey String 加密后的路径
*/
public void createEncryptData(String filename,String filenamekey) throws
IllegalStateException, IllegalBlockSizeException, BadPaddingException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InvalidKeyException, IOException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IllegalStateException, IllegalBlockSizeException,
BadPaddingException, NoSuchPaddingException, InvalidKeySpecException,
NoSuchAlgorithmException, InvalidKeyException, IOException {
// 验证keyfile
if (keyfile == null || keyfile.equals( "" ))
{
throw new NullPointerException( " 无效的key文件路径 " );
}
encryptData(filename,filenamekey);
}
/**
* 加密类文件
* @param filename String 原始的类文件
* @param encryptfile String 加密后的类文件
*/
private void encryptData(String filename,String encryptfile) throws IOException, InvalidKeyException,
NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException,
NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException,
IllegalStateException, ClassNotFoundException, SecurityException,
NoSuchMethodException, InvocationTargetException,
IllegalArgumentException, IllegalAccessException, InstantiationException {
// 载入待加密的文件
byte data[] = Util.readFile(filename);
// 执行加密操作
byte encryptedClassData[] = getencryptData(data);
// 保存加密后的文件,覆盖原有的类文件。
Util.writeFile(encryptedClassData,encryptfile);
}
/**
* 直接获得加密数据
* @param bytes byte[]
* @return byte[]
*/
public byte [] createEncryptData( byte [] bytes) throws IllegalStateException,
IllegalBlockSizeException, BadPaddingException, InvalidKeyException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InstantiationException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IOException {
bytes = getencryptData(bytes);
return bytes;
}
/**
* 加密业务方法
* @param bytes byte[] 待加密数据
* @return byte[] 加密后数据
*/
private byte [] getencryptData( byte [] bytes) throws IOException,
ClassNotFoundException, SecurityException, NoSuchMethodException,
InvocationTargetException, IllegalArgumentException,
IllegalAccessException, InstantiationException, NoSuchAlgorithmException,
InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException,
InvalidKeyException, BadPaddingException, IllegalBlockSizeException,
IllegalStateException {
// 产生一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从密钥文件key Filename中得到密钥数据
byte [] rawKeyData = Util.readFile(keyfile);
// 从原始密钥数据创建DESKeySpec对象
Class classkeyspec = Class.forName(Util.getValue( " keyspec " ));
Constructor constructor = classkeyspec.getConstructor( new Class[]{ byte []. class });
KeySpec dks = (KeySpec)constructor.newInstance( new Object[]{rawKeyData});
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(Util.getAlgorithm());
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(Util.getAlgorithm());
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
// 执行加密操作
bytes = cipher.doFinal(bytes);
// 返回字节数组
return bytes;
}
/**
* 设置key文件路径
* @param keyfile String
*/
public void setKeyFile(String keyfile)
{
this .keyfile = keyfile;
}
}
解密
package
com.crypto.encrypt;
import java.security.SecureRandom;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKeyFactory;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.security.spec.KeySpec;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.io.ByteArrayInputStream;
public class UnEncryptData {
private String keyfile = "" ;
public UnEncryptData() {}
public UnEncryptData(String keyfile) { this .keyfile = keyfile;}
public void createUnEncryptData(String encryptfile,String filename) throws
IllegalStateException, IllegalBlockSizeException, BadPaddingException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InvalidKeyException, IOException, NoSuchMethodException,
SecurityException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
ClassNotFoundException, IllegalStateException, IllegalBlockSizeException,
BadPaddingException, NoSuchPaddingException, InvalidKeySpecException,
NoSuchAlgorithmException, InvalidKeyException, IOException {
// 验证keyfile
if (keyfile == null || keyfile.equals( "" )){
throw new NullPointerException( " 无效的key文件路径 " );
}
unEncryptData(encryptfile,filename);
}
/**
* 解密类文件
* @param encryptfile String 经过加密的文件
* @param filename String 解密后的文件
*/
private void unEncryptData(String encryptfile,String filename) throws
IOException, IllegalStateException, IllegalBlockSizeException,
BadPaddingException, InvalidKeyException, NoSuchPaddingException,
InvalidKeySpecException, NoSuchAlgorithmException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IOException {
// 获得经过加密的数据
byte [] data = Util.readFile(encryptfile);
// 执行解密操作
byte decryptedData[] = getunEncryptData(data);
// 然后将解密后的数据转化成原来的类文件。
Util.writeFile(decryptedData,filename);
}
/**
* 解密字节数组
* @param bytes byte[]
* @return byte[]
*/
public byte [] createUnEncryptData( byte [] bytes) throws IllegalStateException,
IllegalBlockSizeException, BadPaddingException, InvalidKeyException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InstantiationException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IOException {
bytes = getunEncryptData(bytes);
return bytes;
}
/**
*
* @param bytes byte[]
* @return byte[]
*/
private byte [] getunEncryptData( byte [] bytes) throws IOException,
ClassNotFoundException, SecurityException, NoSuchMethodException,
InvocationTargetException, IllegalArgumentException,
IllegalAccessException, InstantiationException, NoSuchAlgorithmException,
InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException,
InvalidKeyException, BadPaddingException, IllegalBlockSizeException,
IllegalStateException {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从密钥文件中获取原始密钥数据
byte [] rawKeyData = Util.readFile(keyfile);
// 创建一个DESKeySpec对象
Class classkeyspec = Class.forName(Util.getValue( " keyspec " ));
Constructor constructor = classkeyspec.getConstructor( new Class[]{ byte []. class });
KeySpec dks = (KeySpec) constructor.newInstance( new Object[]{rawKeyData}); // new DESKeySpec(rawKeyData);
// 创建一个密钥工厂,然后用它把DESKeySpec对象转换成Secret Key对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(Util.getAlgorithm());
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(Util.getAlgorithm());
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, key, sr);
// 获得经过加密的数据
// 执行解密操作
bytes = cipher.doFinal(bytes);
// 然后将解密后的数据转化成原来的类文件。
return bytes;
}
public void setKeyFile(String keyfile){ this .keyfile = keyfile;}
}
import java.security.SecureRandom;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKeyFactory;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.security.spec.KeySpec;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.io.ByteArrayInputStream;
public class UnEncryptData {
private String keyfile = "" ;
public UnEncryptData() {}
public UnEncryptData(String keyfile) { this .keyfile = keyfile;}
public void createUnEncryptData(String encryptfile,String filename) throws
IllegalStateException, IllegalBlockSizeException, BadPaddingException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InvalidKeyException, IOException, NoSuchMethodException,
SecurityException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
ClassNotFoundException, IllegalStateException, IllegalBlockSizeException,
BadPaddingException, NoSuchPaddingException, InvalidKeySpecException,
NoSuchAlgorithmException, InvalidKeyException, IOException {
// 验证keyfile
if (keyfile == null || keyfile.equals( "" )){
throw new NullPointerException( " 无效的key文件路径 " );
}
unEncryptData(encryptfile,filename);
}
/**
* 解密类文件
* @param encryptfile String 经过加密的文件
* @param filename String 解密后的文件
*/
private void unEncryptData(String encryptfile,String filename) throws
IOException, IllegalStateException, IllegalBlockSizeException,
BadPaddingException, InvalidKeyException, NoSuchPaddingException,
InvalidKeySpecException, NoSuchAlgorithmException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IOException {
// 获得经过加密的数据
byte [] data = Util.readFile(encryptfile);
// 执行解密操作
byte decryptedData[] = getunEncryptData(data);
// 然后将解密后的数据转化成原来的类文件。
Util.writeFile(decryptedData,filename);
}
/**
* 解密字节数组
* @param bytes byte[]
* @return byte[]
*/
public byte [] createUnEncryptData( byte [] bytes) throws IllegalStateException,
IllegalBlockSizeException, BadPaddingException, InvalidKeyException,
NoSuchPaddingException, InvalidKeySpecException, NoSuchAlgorithmException,
InstantiationException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException,
ClassNotFoundException, IOException {
bytes = getunEncryptData(bytes);
return bytes;
}
/**
*
* @param bytes byte[]
* @return byte[]
*/
private byte [] getunEncryptData( byte [] bytes) throws IOException,
ClassNotFoundException, SecurityException, NoSuchMethodException,
InvocationTargetException, IllegalArgumentException,
IllegalAccessException, InstantiationException, NoSuchAlgorithmException,
InvalidKeySpecException, NoSuchPaddingException, NoSuchAlgorithmException,
InvalidKeyException, BadPaddingException, IllegalBlockSizeException,
IllegalStateException {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从密钥文件中获取原始密钥数据
byte [] rawKeyData = Util.readFile(keyfile);
// 创建一个DESKeySpec对象
Class classkeyspec = Class.forName(Util.getValue( " keyspec " ));
Constructor constructor = classkeyspec.getConstructor( new Class[]{ byte []. class });
KeySpec dks = (KeySpec) constructor.newInstance( new Object[]{rawKeyData}); // new DESKeySpec(rawKeyData);
// 创建一个密钥工厂,然后用它把DESKeySpec对象转换成Secret Key对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(Util.getAlgorithm());
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(Util.getAlgorithm());
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, key, sr);
// 获得经过加密的数据
// 执行解密操作
bytes = cipher.doFinal(bytes);
// 然后将解密后的数据转化成原来的类文件。
return bytes;
}
public void setKeyFile(String keyfile){ this .keyfile = keyfile;}
}
algorithm.properties资源文件
algorithm
=
DES
keyspec = javax.crypto.spec.DESKeySpec
keypath = src / resource / key
keyspec = javax.crypto.spec.DESKeySpec
keypath = src / resource / key
测试类
package
com.crypto.encrypt;
import java.security. * ;
import java.io. * ;
import java.lang.reflect. * ;
import java.security.spec. * ;
import javax.crypto. * ;
import javax.crypto. * ;
import javax.crypto. * ;
import sun.security.provider.MD5;
public class TestEncrypt {
public TestEncrypt() {
}
/**
* 创建KEY
* @param keyPath String 生成密钥路径
*/
public void createKey(String keyPath){
CreateKey ck = new CreateKey();
try {
ck.CreateKeyFile(keyPath);
} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();
} catch (IOException ex) {ex.printStackTrace();
}
}
/**
* 加密
* @param sourcePath String 待加密文件路径
* @param distinationPath String 文件加密后保存路径
* @param keyPath String 密匙文件路径
*/
public void encrypt(String sourcePath,String distinationPath,String keyPath){
EncryptData enc = new EncryptData(keyPath);
try {
enc.createEncryptData(sourcePath, distinationPath);
} catch (ClassNotFoundException ex) {ex.printStackTrace();
} catch (SecurityException ex) {ex.printStackTrace();
} catch (NoSuchMethodException ex) {ex.printStackTrace();
} catch (InvocationTargetException ex) {ex.printStackTrace();
} catch (IllegalArgumentException ex) {ex.printStackTrace();
} catch (IllegalAccessException ex) {ex.printStackTrace();
} catch (InstantiationException ex) {ex.printStackTrace();
} catch (IOException ex) {ex.printStackTrace();
} catch (InvalidKeyException ex) {ex.printStackTrace();
} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();
} catch (InvalidKeySpecException ex) {ex.printStackTrace();
} catch (NoSuchPaddingException ex) {ex.printStackTrace();
} catch (BadPaddingException ex) {ex.printStackTrace();
} catch (IllegalBlockSizeException ex) {ex.printStackTrace();
} catch (IllegalStateException ex) {ex.printStackTrace();
}
}
/**
* 解密文件
* @param sourcePath String 待解密文件路径
* @param distinationPath String 解密后文件路径
* @param keyPath String 密钥路径
*/
public void unEncrypt(String sourcePath,String distinationPath,String keyPath){
UnEncryptData unEnc = new UnEncryptData(keyPath);
try {
unEnc.createUnEncryptData(sourcePath,distinationPath);
} catch (ClassNotFoundException ex) {ex.printStackTrace();
} catch (InvocationTargetException ex) {ex.printStackTrace();
} catch (IllegalArgumentException ex) {ex.printStackTrace();
} catch (IllegalAccessException ex) {ex.printStackTrace();
} catch (InstantiationException ex) {ex.printStackTrace();
} catch (SecurityException ex) {ex.printStackTrace();
} catch (NoSuchMethodException ex) {ex.printStackTrace();
} catch (IOException ex) {ex.printStackTrace();
} catch (InvalidKeyException ex) {ex.printStackTrace();
} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();
} catch (InvalidKeySpecException ex) {ex.printStackTrace();
} catch (NoSuchPaddingException ex) {ex.printStackTrace();
} catch (BadPaddingException ex) {ex.printStackTrace();
} catch (IllegalBlockSizeException ex) {ex.printStackTrace();
} catch (IllegalStateException ex) {ex.printStackTrace();
}
}
public static void main(String[] args) {
TestEncrypt e = new TestEncrypt();
e.createKey( " classes\\resource\\key1 " );
e.encrypt( " classes\\resource\\a.txt " , " classes\\resource\\ena.txt " , " classes\\resource\\key1 " );
e.unEncrypt( " classes\\resource\\ena.txt " , " classes\\resource\\una.txt " , " classes\\resource\\key1 " );
}
}
import java.security. * ;
import java.io. * ;
import java.lang.reflect. * ;
import java.security.spec. * ;
import javax.crypto. * ;
import javax.crypto. * ;
import javax.crypto. * ;
import sun.security.provider.MD5;
public class TestEncrypt {
public TestEncrypt() {
}
/**
* 创建KEY
* @param keyPath String 生成密钥路径
*/
public void createKey(String keyPath){
CreateKey ck = new CreateKey();
try {
ck.CreateKeyFile(keyPath);
} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();
} catch (IOException ex) {ex.printStackTrace();
}
}
/**
* 加密
* @param sourcePath String 待加密文件路径
* @param distinationPath String 文件加密后保存路径
* @param keyPath String 密匙文件路径
*/
public void encrypt(String sourcePath,String distinationPath,String keyPath){
EncryptData enc = new EncryptData(keyPath);
try {
enc.createEncryptData(sourcePath, distinationPath);
} catch (ClassNotFoundException ex) {ex.printStackTrace();
} catch (SecurityException ex) {ex.printStackTrace();
} catch (NoSuchMethodException ex) {ex.printStackTrace();
} catch (InvocationTargetException ex) {ex.printStackTrace();
} catch (IllegalArgumentException ex) {ex.printStackTrace();
} catch (IllegalAccessException ex) {ex.printStackTrace();
} catch (InstantiationException ex) {ex.printStackTrace();
} catch (IOException ex) {ex.printStackTrace();
} catch (InvalidKeyException ex) {ex.printStackTrace();
} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();
} catch (InvalidKeySpecException ex) {ex.printStackTrace();
} catch (NoSuchPaddingException ex) {ex.printStackTrace();
} catch (BadPaddingException ex) {ex.printStackTrace();
} catch (IllegalBlockSizeException ex) {ex.printStackTrace();
} catch (IllegalStateException ex) {ex.printStackTrace();
}
}
/**
* 解密文件
* @param sourcePath String 待解密文件路径
* @param distinationPath String 解密后文件路径
* @param keyPath String 密钥路径
*/
public void unEncrypt(String sourcePath,String distinationPath,String keyPath){
UnEncryptData unEnc = new UnEncryptData(keyPath);
try {
unEnc.createUnEncryptData(sourcePath,distinationPath);
} catch (ClassNotFoundException ex) {ex.printStackTrace();
} catch (InvocationTargetException ex) {ex.printStackTrace();
} catch (IllegalArgumentException ex) {ex.printStackTrace();
} catch (IllegalAccessException ex) {ex.printStackTrace();
} catch (InstantiationException ex) {ex.printStackTrace();
} catch (SecurityException ex) {ex.printStackTrace();
} catch (NoSuchMethodException ex) {ex.printStackTrace();
} catch (IOException ex) {ex.printStackTrace();
} catch (InvalidKeyException ex) {ex.printStackTrace();
} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();
} catch (InvalidKeySpecException ex) {ex.printStackTrace();
} catch (NoSuchPaddingException ex) {ex.printStackTrace();
} catch (BadPaddingException ex) {ex.printStackTrace();
} catch (IllegalBlockSizeException ex) {ex.printStackTrace();
} catch (IllegalStateException ex) {ex.printStackTrace();
}
}
public static void main(String[] args) {
TestEncrypt e = new TestEncrypt();
e.createKey( " classes\\resource\\key1 " );
e.encrypt( " classes\\resource\\a.txt " , " classes\\resource\\ena.txt " , " classes\\resource\\key1 " );
e.unEncrypt( " classes\\resource\\ena.txt " , " classes\\resource\\una.txt " , " classes\\resource\\key1 " );
}
}