DES加密(二)

java实现DES加密算法
  为了实现一对密钥对整个项目所有加密解密文件都适用的方法,考试,大提示采用先生成一对密钥.保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了.
  /**
  * 把成生的一对密钥保存到DesKey.xml文件中
  */
  public static void saveDesKey(){
  try {
  SecureRandom sr = new SecureRandom();
  //为我们选择的DES算法生成一个KeyGenerator对象
  KeyGenerator kg = KeyGenerator.getInstance (\"DES\" );
  kg.init (sr);
  FileOutputStream fos = new FileOutputStream(\"C:/DesKey.xml\");
  ObjectOutputStream oos = new ObjectOutputStream(fos);
  //生成密钥
  Key key = kg.generateKey();
  oos.writeObject(key);
  oos.close();
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  获取密钥方法如下:
  /**
  * 获得DES加密的密钥。在交易处理的过程中应该定时更
  * 换密钥。需要JCE的支持,如果jdk版本低于1.4,则需要
  * 安装jce-1_2_2才能正常使用。
  * @return Key 返回对称密钥
  */
  public static Key getKey() {
  Key kp = null;
  try {
  String fileName = \"conf/DesKey.xml\";
  InputStream is = DesUtil.class.getClassLoader()
  .getResourceAsStream(fileName);
  ObjectInputStream oos = new ObjectInputStream(is);
  kp = (Key) oos.readObject();
  oos.close();
  } catch (Exception e) {
  e.printStackTrace();
  }
  return kp;
  }
  文件采用DES算法加密文件
  /**
  * 文件file进行加密并保存目标文件destFile中
  * @param file
  * 要加密的文件 如c:/test/srcFile.txt
  * @param destFile
  * 加密后存放的文件名 如c:/加密后文件.txt
  */
  public static void encrypt(String file, String destFile) throws Exception {
  Cipher cipher = Cipher.getInstance(\"DES\");
  cipher.init(Cipher.ENCRYPT_MODE, getKey());
  InputStream is = new FileInputStream(file);
  OutputStream out = new FileOutputStream(dest);
  CipherInputStream cis = new CipherInputStream(is, cipher);
  byte[] buffer = new byte[1024];
  int r;
  while ((r = cis.read(buffer)) > 0) {
  out.write(buffer, 0, r);
  }
  cis.close();
  is.close();
  out.close();
  }
  文件采用DES算法解密文件
  /**
  * 文件file进行加密并保存目标文件destFile中
  * @param file
  * 已加密的文件 如c:/加密后文件.txt
  * @param destFile
  * 解密后存放的文件名 如c:/ test/解密后文件.txt
  */
  public static void decrypt(String file, String dest) throws Exception {
  Cipher cipher = Cipher.getInstance(\"DES\");
  cipher.init(Cipher.DECRYPT_MODE, getKey());
  InputStream is = new FileInputStream(file);
  OutputStream out = new FileOutputStream(dest);
  CipherOutputStream cos = new CipherOutputStream(out, cipher);
  byte[] buffer = new byte[1024];
  int r;
  while ((r = is.read(buffer)) >= 0) {
  cos.write(buffer, 0, r);
  }
  cos.close();
  out.close();
  is.close();
  }

你可能感兴趣的:(C++,c,算法,xml,C#)