java,file,算法,加密解密,java源码

来源:互联网 发布:iphone高速摄影软件 编辑:程序博客网 时间:2024/06/18 18:06
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 加密后的类文件   * @throws IOException   * @throws InvalidKeyException   * @throws NoSuchAlgorithmException   * @throws InvalidKeySpecException   * @throws NoSuchPaddingException   * @throws NoSuchAlgorithmException   * @throws BadPaddingException   * @throws IllegalBlockSizeException   * @throws IllegalStateException   */  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[]   * @throws IllegalStateException   * @throws IllegalBlockSizeException   * @throws BadPaddingException   * @throws InvalidKeyException   * @throws NoSuchPaddingException   * @throws InvalidKeySpecException   * @throws NoSuchAlgorithmException   * @throws InstantiationException   * @throws IllegalAccessException   * @throws IllegalArgumentException   * @throws InvocationTargetException   * @throws NoSuchMethodException   * @throws SecurityException   * @throws ClassNotFoundException   * @throws IOException   * @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;  }  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;  }}

0 0