(java 基础知识) java 加密操作---java.crypto

发布时间:2017-6-29 17:12:14 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"(java 基础知识) java 加密操作---java.crypto",主要涉及到(java 基础知识) java 加密操作---java.crypto方面的内容,对于(java 基础知识) java 加密操作---java.crypto感兴趣的同学可以参考一下。

java对文件进行加密解密操作 接口类: package JFFileEncrypt; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; /**  * 功能:对文件加密解密操作  * @author jiangfeng  *  */ public interface FileEncryptInterface {  /**   * 加密算法   * @param key   * @param FileName   * @return   */  public boolean DESEncrypt(Key key, String FileName);  /**   * 解密算法   * @param FileName   * @param key   * @return   */  public boolean DESDecrypt(String FileName, Key key);  /**   * 自定义一个key   */  public Key getKey(String keyRule);  /**   * 第二种产生key的方法   * @return   */  public Key getKey2(); } 接口实现类: package JFFileEncrypt; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.security.InvalidKeyException; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; /**  * 功能:对文件加密解密操作  * @author jiangfeng  *  */ public class FileEncryptImpal implements FileEncryptInterface {  /**   * 功能:加密文件   */  public boolean DESEncrypt(Key key, String FileName)  {   boolean result = false;   StringBuffer sb = null;   try   {    /*     * Cipher类无构造方法,调用getInstance()方法将所请求转换的名称传递给它 参数为 转换的名称,例如     * DES/CBC/PKCS5Padding,这里我们使用DES转换。     */    Cipher encriptCipher = Cipher.getInstance("DES");    // 用密钥初始化此 Cipher    encriptCipher.init(Cipher.ENCRYPT_MODE, key);    FileInputStream in = new FileInputStream(FileName);    int size = in.available();    byte[] encode = new byte[size];    in.read(encode);    String srcCode = new String(encode);    // 按单部分操作加密数据    byte[] desCode = encriptCipher.doFinal(srcCode.getBytes());    // 将加密后的数据转换成16进制的字符串返回    sb = new StringBuffer(desCode.length * 2);    for (int i = 0; i < desCode.length; i++)    {     int temp = desCode[i];     // 把负数转换为正数     if (temp < 0)     {      temp = temp + 256;// byte的最小值为-256,最大值为255     }     // 小于 0F 的数需要在前面补0     if (temp < 16)     {      sb.append("0");     }     sb.append(Integer.toString(temp, 16));    }    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(      new FileOutputStream(FileName)));    out.write(sb.toString(), 0, sb.length());    out.close();    result = true;   }   catch (NoSuchAlgorithmException e)   {    e.printStackTrace();   }   catch (NoSuchPaddingException e)   {    e.printStackTrace();   }   catch (InvalidKeyException e)   {    e.printStackTrace();   }   catch (IllegalBlockSizeException e)   {    e.printStackTrace();   }   catch (IOException e)   {    e.printStackTrace();   }   catch (BadPaddingException e)   {    e.printStackTrace();   }   return result;  }  /**   * 功能:解密文件   */  public boolean DESDecrypt(String FileName, Key key)  {   Cipher decriptCipher = null;   String decriptString = null;   boolean result = false;   try   {    FileInputStream in = new FileInputStream(FileName);    int size = in.available();    byte[] encode = new byte[size];    in.read(encode);    String encriptCode = new String(encode);    byte[] encriptByte = encriptCode.getBytes();    byte[] decriptByte = new byte[encriptByte.length / 2];    for (int i = 0; i < encriptByte.length; i += 2)    {     String strTmp = new String(encriptByte, i, 2);     decriptByte[i / 2] = (byte) Integer.parseInt(strTmp, 16);    }    decriptCipher = Cipher.getInstance("DES");    decriptCipher.init(Cipher.DECRYPT_MODE, key);    byte[] outByte = decriptCipher.doFinal(decriptByte);    decriptString = new String(outByte);    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(      new FileOutputStream(FileName)));    out.write(decriptString.toString(), 0, decriptString.length());    out.close();   }   catch (NoSuchAlgorithmException e)   {    e.printStackTrace();   }   catch (NoSuchPaddingException e)   {    e.printStackTrace();   }   catch (InvalidKeyException e)   {    e.printStackTrace();   }   catch (IllegalBlockSizeException e)   {    e.printStackTrace();   }   catch (BadPaddingException e)   {    System.out.println("密钥错误!");    e.printStackTrace();   }   catch (IOException e)   {    e.printStackTrace();   }   return result;  }  /**   * 自定义一个key   */  public Key getKey(String keyRule)  {   Key key = null;   byte[] keyByte = keyRule.getBytes();   // 创建一个空的八位数组,默认情况下为0   byte[] byteTemp = new byte[8];   // 将用户指定的规则转换成八位数组   for (int i = 0; i < byteTemp.length && i < keyByte.length; i++)   {    byteTemp[i] = keyByte[i];   }   key = new SecretKeySpec(byteTemp, "DES");   return key;  }  /**   * 第二种产生key的方法   *   * @return   */  public Key getKey2()  {   Key key = null;   // 创建一个可信任的随机数源,DES算法需要   SecureRandom sr = new SecureRandom();   try   {    // 用DES算法创建一个KeyGenerator对象    KeyGenerator kg = KeyGenerator.getInstance("DES");    // 初始化此密钥生成器,使其具有确定的密钥长度    kg.init(sr);    // 生成密匙    key = kg.generateKey();   }   catch (NoSuchAlgorithmException e)   {    e.printStackTrace();   }   return key;  } } 测试方法: package JFFileEncrypt; import java.security.Key; public class Test {  public static void main(String[] args)  {   FileEncryptInterface encrypt = new FileEncryptImpal();   // 要加密的原文   String FileName = "FTP.xml";   // 自己指定的密钥   String keyRule = "jiangfeng861016shanghaigongzuo";   Key key = encrypt.getKey(keyRule);   encrypt.DESEncrypt(key, FileName);   encrypt.DESDecrypt(FileName, key);  } }

上一篇:CopyOnWriteArrayList的理解
下一篇:Bash 实现MR

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。