【JAVA核心技术】加密之对称加密

来源:互联网 发布:什么是店宝宝软件 编辑:程序博客网 时间:2024/06/06 13:01

本示例采用AES(高级加密标准)对文件进行加密。要使用改程序先要生成密钥,

运行如下命令:java AESTest -genkey secret.key  这样密钥就被保存到secret.key文件中了。

现在可以用如下命令对文件进行加密:java AESTest -encrypt F:\javacode\a.html  F:\javacode\x.html secret.key 。

这里首先是在secret.key获取密钥然后读取a.html把它加密的内容放到x.html。

如下命令进行解密:java AESTest -decrypt F:\javacode\x.html  F:\javacode\b.html secret.key。

同样在secret.key获取密钥然后把加密后的x.html文件中的内容进行解密,把解密的内容放到b.html。

这样a.html中的内容就和b.html中内容相同了。

import java.io.*;import java.security.*;import javax.crypto.*;/** * This program tests the AES cipher. Usage:<br> * java AESTest -genkey keyfile<br> * java AESTest -encrypt plaintext encrypted keyfile<br> * java AESTest -decrypt encrypted decrypted keyfile<br> * @author Cay Horstmann * @version 1.0 2004-09-14 */public class AESTest{   public static void main(String[] args)   {      try      {         if (args[0].equals("-genkey"))         {            KeyGenerator keygen = KeyGenerator.getInstance("AES");            SecureRandom random = new SecureRandom();            keygen.init(random);            SecretKey key = keygen.generateKey();            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(args[1]));            out.writeObject(key);            out.close();         }         else         {            int mode;            if (args[0].equals("-encrypt")) mode = Cipher.ENCRYPT_MODE;            else mode = Cipher.DECRYPT_MODE;            ObjectInputStream keyIn = new ObjectInputStream(new FileInputStream(args[3]));            Key key = (Key) keyIn.readObject();            keyIn.close();            InputStream in = new FileInputStream(args[1]);            OutputStream out = new FileOutputStream(args[2]);            Cipher cipher = Cipher.getInstance("AES");            cipher.init(mode, key);            crypt(in, out, cipher);            in.close();            out.close();         }      }      catch (IOException e)      {         e.printStackTrace();      }      catch (GeneralSecurityException e)      {         e.printStackTrace();      }      catch (ClassNotFoundException e)      {         e.printStackTrace();      }   }   /**    * Uses a cipher to transform the bytes in an input stream and sends the transformed bytes to an    * output stream.    * @param in the input stream    * @param out the output stream    * @param cipher the cipher that transforms the bytes    */   public static void crypt(InputStream in, OutputStream out, Cipher cipher) throws IOException,         GeneralSecurityException   {      int blockSize = cipher.getBlockSize();      int outputSize = cipher.getOutputSize(blockSize);      byte[] inBytes = new byte[blockSize];      byte[] outBytes = new byte[outputSize];      int inLength = 0;      boolean more = true;      while (more)      {         inLength = in.read(inBytes);         if (inLength == blockSize)         {            int outLength = cipher.update(inBytes, 0, blockSize, outBytes);            out.write(outBytes, 0, outLength);         }         else more = false;      }      if (inLength > 0) outBytes = cipher.doFinal(inBytes, 0, inLength);      else outBytes = cipher.doFinal();      out.write(outBytes);   }}


原创粉丝点击