zoukankan      html  css  js  c++  java
  • Android加密算法之AES加密和解密实现

    <pre name="code" class="plain"><span style="font-family:Microsoft YaHei;font-size:18px;">前面写了经常使用了MD5加密算法。一个肯定不能满足本屌丝的胃口,近期发现AES加密算法貌似挺牛逼的样子。还是是美国联邦政府採用的一种区块高级加密标准。一看到“高级”就把我吓尿了,果然牛逼,废话少说,先学会用再说。

    </span>


    
    
    /**
      * @param
      * @return AES加密算法加密
      * @throws Exception
      */
     public static String encrypt(String seed, String cleartext)
       throws Exception {
      byte[] rawKey = getRawKey(seed.getBytes());
      byte[] result = encrypt(rawKey, cleartext.getBytes());
      return toHex(result);
     }
     /**
      * @param
      * @return AES加密算法加密
      * @throws Exception
      */
     private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
      SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
      Cipher cipher = Cipher.getInstance("AES");
      cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
      byte[] encrypted = cipher.doFinal(clear);
      return encrypted;
     }
     private static String toHex(byte[] buf) {
      final String HEX = "0123456789ABCDEF";
      if (buf == null)
       return "";
      StringBuffer result = new StringBuffer(2 * buf.length);
      for (int i = 0; i < buf.length; i++) {
       result.append(HEX.charAt((buf[i] >> 4) & 0x0f)).append(
         HEX.charAt(buf[i] & 0x0f));
      }
      return result.toString();
     }
     /**
      * @param raw
      * @param encrypted
      * @return AES加密算法解密
      * @throws Exception
      */
     public static String decrypt(String seed, String encrypted)
       throws Exception {
      byte[] rawKey = getRawKey(seed.getBytes());
      byte[] enc = toByte(encrypted);
      byte[] result = decrypt(rawKey, enc);
      return new String(result);
     }
     private static byte[] decrypt(byte[] raw, byte[] encrypted)
       throws Exception {
      SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
      Cipher cipher = Cipher.getInstance("AES");
      cipher.init(Cipher.DECRYPT_MODE, skeySpec);
      byte[] decrypted = cipher.doFinal(encrypted);
      return decrypted;
     }
     private static byte[] toByte(String hexString) {
      int len = hexString.length() / 2;
      byte[] result = new byte[len];
      for (int i = 0; i < len; i++)
       result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
         16).byteValue();
      return result;
     }
     private static byte[] getRawKey(byte[] seed) throws Exception {
      KeyGenerator kgen = KeyGenerator.getInstance("AES");
      SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
      sr.setSeed(seed);
      kgen.init(128, sr); // 192 and 256 bits may not be available
      SecretKey skey = kgen.generateKey();
      byte[] raw = skey.getEncoded();
      return raw;
     }
    測试代码:
    <span style="font-family:Courier New;font-size:18px;">        String masterPassword = "test";  
            String originalText = "0123456789";
            String encryptingCode = SimpleCrypto.encrypt(masterPassword,originalText);  
            Log.i("加密结果为 ",encryptingCode);  
            String decryptingCode = SimpleCrypto.decrypt(masterPassword, encryptingCode);
            Log.i("解密结果",decryptingCode);  </span>

    PS:AES属于对称加密方法,可破解有木有!

  • 相关阅读:
    Installing PHP-7 with Memcached
    在Ubuntu1.4下升级php和Yii2
    apache设置反向代理实现前端js跨域访问
    mysql多重排序判断,根据状态区分时间排序方式
    利用缓存锁解决接口连续访问
    phpstorm启动内存配置
    ubuntu ssh修改用户密码
    Yii2手动安装第三方扩展(转)
    html input file 设置文件类型
    yii2 gridView中使用下拉列表筛选数据
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6753114.html
Copyright © 2011-2022 走看看