AES对称加密例子

2012-11-12

  1 什么是AES

  AES是一种对称的私钥加密技术。它支持128,192,256位加密。

  2 AES和Java

  从j2se1.4.2开始,集成了JCE包。

  现在的java支持128位key的加密。(下面的程序也是以128位为例讲解的)

  3 如何使用JCE

  例

  Java代码

  import java.security.*;

  import javax.crypto.*;

  import javax.crypto.spec.*;

  import java.io.*;

  /**

  * This program generates a AES key, retrieves its raw bytes, and

  * then reinstantiates a AES key from the key bytes.

  * The reinstantiated key is used to initialize a AES cipher for

  * encryption and decryption.

  */

  public class AES {

  /**

  * Turns array of bytes into string

  *

  * @param buf  Array of bytes to convert to hex string

  * @return Generated hex string

  */

  public static String asHex (byte buf[]) {

  StringBuffer strbuf = new StringBuffer(buf.length * 2);

  int i;

  for (i = 0; i < buf.length; i++) {

  if (((int) buf[i] & 0xff) < 0x10)

  strbuf.append("0");

  strbuf.append(Long.toString((int) buf[i] & 0xff, 16));

  }

  return strbuf.toString();

  }

  public static void main(String[] args) throws Exception {

  String message="This is just an example";

  // Get the KeyGenerator

  KeyGenerator kgen = KeyGenerator.getInstance("AES");

  kgen.init(128); // 192 and 256 bits may not be available

  // Generate the secret key specs.

  SecretKey skey = kgen.generateKey();

  byte[] raw = skey.getEncoded();

  SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

  // Instantiate the cipher

  Cipher cipher = Cipher.getInstance("AES");

  cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

  byte[] encrypted =

  cipher.doFinal((args.length == 0 ?

  "This is just an example" : args[0]).getBytes());

  System.out.println("encrypted string: " + asHex(encrypted));

  cipher.init(Cipher.DECRYPT_MODE, skeySpec);

  byte[] original =

  cipher.doFinal(encrypted);

  String originalString = new String(original);

  System.out.println("Original string: " +

  originalString + " " + asHex(original));

  }

  }

  import java.security.*;

  import javax.crypto.*;

  import javax.crypto.spec.*;

  import java.io.*;

  /**

  * This program generates a AES key, retrieves its raw bytes, and

  * then reinstantiates a AES key from the key bytes.

  * The reinstantiated key is used to initialize a AES cipher for

  * encryption and decryption.

  */

  public class AES {

  /**

  * Turns array of bytes into string

  *

  * @param bufArray of bytes to convert to hex string

  * @returnGenerated hex string

  */

  public static String asHex (byte buf[]) {

  StringBuffer strbuf = new StringBuffer(buf.length * 2);

  int i;

  for (i = 0; i < buf.length; i++) {

  if (((int) buf[i] & 0xff) < 0x10)

  strbuf.append("0");

  strbuf.append(Long.toString((int) buf[i] & 0xff, 16));

  }

  return strbuf.toString();

  }

  public static void main(String[] args) throws Exception {

  String message="This is just an example";

  // Get the KeyGenerator

  KeyGenerator kgen = KeyGenerator.getInstance("AES");

  kgen.init(128); // 192 and 256 bits may not be available

  // Generate the secret key specs.

  SecretKey skey = kgen.generateKey();

  byte[] raw = skey.getEncoded();

  SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

  // Instantiate the cipher

  Cipher cipher = Cipher.getInstance("AES");

  cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

  byte[] encrypted =

  cipher.doFinal((args.length == 0 ?

  "This is just an example" : args[0]).getBytes());

  System.out.println("encrypted string: " + asHex(encrypted));

  cipher.init(Cipher.DECRYPT_MODE, skeySpec);

  byte[] original =

  cipher.doFinal(encrypted);

  String originalString = new String(original);

  System.out.println("Original string: " +

  originalString + " " + asHex(original));

  }

  }

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com