java使用AES加密解密 AES-128-ECB加密

http://www.cnblogs.com/chen-lhx/p/5817161.html

***************************************************

 

  1.  
    import javax.crypto.Cipher;
  2.  
    import javax.crypto.spec.SecretKeySpec;
  3.  
     
  4.  
    import org.apache.commons.codec.binary.Base64;
  5.  
    /**
  6.  
    *
  7.  
    * @author Administrator
  8.  
    *
  9.  
    */
  10.  
    public class AES {
  11.  
     
  12.  
    // 加密
  13.  
    public static String Encrypt(String sSrc, String sKey) throws Exception {
  14.  
    if (sKey == null) {
  15.  
    System.out.print( "Key为空null");
  16.  
    return null;
  17.  
    }
  18.  
    // 判断Key是否为16位
  19.  
    if (sKey.length() != 16) {
  20.  
    System.out.print( "Key长度不是16位");
  21.  
    return null;
  22.  
    }
  23.  
    byte[] raw = sKey.getBytes("utf-8");
  24.  
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
  25.  
    Cipher cipher = Cipher.getInstance( "AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
  26.  
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
  27.  
    byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
  28.  
     
  29.  
    return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
  30.  
    }
  31.  
     
  32.  
    // 解密
  33.  
    public static String Decrypt(String sSrc, String sKey) throws Exception {
  34.  
    try {
  35.  
    // 判断Key是否正确
  36.  
    if (sKey == null) {
  37.  
    System.out.print( "Key为空null");
  38.  
    return null;
  39.  
    }
  40.  
    // 判断Key是否为16位
  41.  
    if (sKey.length() != 16) {
  42.  
    System.out.print( "Key长度不是16位");
  43.  
    return null;
  44.  
    }
  45.  
    byte[] raw = sKey.getBytes("utf-8");
  46.  
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
  47.  
    Cipher cipher = Cipher.getInstance( "AES/ECB/PKCS5Padding");
  48.  
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
  49.  
    byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密
  50.  
    try {
  51.  
    byte[] original = cipher.doFinal(encrypted1);
  52.  
    String originalString = new String(original,"utf-8");
  53.  
    return originalString;
  54.  
    } catch (Exception e) {
  55.  
    System.out.println(e.toString());
  56.  
    return null;
  57.  
    }
  58.  
    } catch (Exception ex) {
  59.  
    System.out.println(ex.toString());
  60.  
    return null;
  61.  
    }
  62.  
    }
  63.  
     
  64.  
    public static void main(String[] args) throws Exception {
  65.  
    /*
  66.  
    * 此处使用AES-128-ECB加密模式,key需要为16位。
  67.  
    */
  68.  
    String cKey = "1234567890123456";
  69.  
    // 需要加密的字串
  70.  
    String cSrc = "www.gowhere.so";
  71.  
    System.out.println(cSrc);
  72.  
    // 加密
  73.  
    String enString = AES.Encrypt(cSrc, cKey);
  74.  
    System.out.println( "加密后的字串是:" + enString);
  75.  
     
  76.  
    // 解密
  77.  
    String DeString = AES.Decrypt(enString, cKey);
  78.  
    System.out.println( "解密后的字串是:" + DeString);
  79.  
    }
  80.  
    }
  81.  
     
  82.  
    //源代码片段来自云代码http://yuncode.net


android

 

 

    1.  
      package cd.server.data;
    2.  
       
    3.  
      import javax.crypto.Cipher;
    4.  
      import javax.crypto.spec.SecretKeySpec;
    5.  
       
    6.  
      import android.annotation.SuppressLint;
    7.  
      import android.util.Base64;
    8.  
       
    9.  
      // http://blog.csdn.net/hbcui1984/article/details/5201247
    10.  
      // AES加密解密工具类
    11.  
      public class AES128
    12.  
      {
    13.  
      private static final String UTF_8 = "UTF-8";
    14.  
       
    15.  
      /**
    16.  
      * 加密
    17.  
      * @param content 需要加密的内容
    18.  
      * @param password 加密密码
    19.  
      * @return
    20.  
      */
    21.  
      @SuppressLint ("TrulyRandom")
    22.  
      public static String encrypt(String key, String src)
    23.  
      {
    24.  
      try
    25.  
      {
    26.  
      if(key == null || key.length() <= 0 || src == null || src.length() <= 0) return null;
    27.  
       
    28.  
      SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
    29.  
      Cipher cipher = Cipher.getInstance( "AES/ECB/PKCS5Padding");
    30.  
      byte[] byteContent = src.getBytes(UTF_8);
    31.  
      cipher.init(Cipher.ENCRYPT_MODE, skey); // 初始化
    32.  
      byte[] result = cipher.doFinal(byteContent);
    33.  
      return byte2Base64(result); // 加密
    34.  
      }
    35.  
      catch (Exception ext)
    36.  
      {
    37.  
      ext.printStackTrace();
    38.  
      }
    39.  
      return null;
    40.  
      }
    41.  
      private static String byte2Base64(byte[] encode)
    42.  
      {
    43.  
      try
    44.  
      {
    45.  
      return Base64.encodeToString(encode, Base64.NO_WRAP);
    46.  
       
    47.  
      }
    48.  
      catch (Exception ext)
    49.  
      {
    50.  
      ext.printStackTrace();
    51.  
      }
    52.  
       
    53.  
      return null;
    54.  
      }
    55.  
      }

转载于:https://www.cnblogs.com/t0000/articles/9680135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值