1. <pre name="code" class="plain"><span style="font-family:Microsoft YaHei;font-size:18px;">前面写了经常使用了MD5加密算法。一个肯定不能满足本屌丝的胃口,近期发现AES加密算法貌似挺牛逼的样子。还是是美国联邦政府採用的一种区块高级加密标准。一看到“高级”就把我吓尿了,果然牛逼,废话少说,先学会用再说。
  2.  
  3. </span>
  1.  
  1. /**
  2. * @param
  3. * @return AES加密算法加密
  4. * @throws Exception
  5. */
  6. public static String encrypt(String seed, String cleartext)
  7. throws Exception {
  8. byte[] rawKey = getRawKey(seed.getBytes());
  9. byte[] result = encrypt(rawKey, cleartext.getBytes());
  10. return toHex(result);
  11. }
  12. /**
  13. * @param
  14. * @return AES加密算法加密
  15. * @throws Exception
  16. */
  17. private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
  18. SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
  19. Cipher cipher = Cipher.getInstance("AES");
  20. cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
  21. byte[] encrypted = cipher.doFinal(clear);
  22. return encrypted;
  23. }
  24. private static String toHex(byte[] buf) {
  25. final String HEX = "0123456789ABCDEF";
  26. if (buf == null)
  27. return "";
  28. StringBuffer result = new StringBuffer(2 * buf.length);
  29. for (int i = 0; i < buf.length; i++) {
  30. result.append(HEX.charAt((buf[i] >> 4) & 0x0f)).append(
  31. HEX.charAt(buf[i] & 0x0f));
  32. }
  33. return result.toString();
  34. }
  35. /**
  36. * @param raw
  37. * @param encrypted
  38. * @return AES加密算法解密
  39. * @throws Exception
  40. */
  41. public static String decrypt(String seed, String encrypted)
  42. throws Exception {
  43. byte[] rawKey = getRawKey(seed.getBytes());
  44. byte[] enc = toByte(encrypted);
  45. byte[] result = decrypt(rawKey, enc);
  46. return new String(result);
  47. }
  48. private static byte[] decrypt(byte[] raw, byte[] encrypted)
  49. throws Exception {
  50. SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
  51. Cipher cipher = Cipher.getInstance("AES");
  52. cipher.init(Cipher.DECRYPT_MODE, skeySpec);
  53. byte[] decrypted = cipher.doFinal(encrypted);
  54. return decrypted;
  55. }
  56. private static byte[] toByte(String hexString) {
  57. int len = hexString.length() / 2;
  58. byte[] result = new byte[len];
  59. for (int i = 0; i < len; i++)
  60. result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
  61. 16).byteValue();
  62. return result;
  63. }
  64. private static byte[] getRawKey(byte[] seed) throws Exception {
  65. KeyGenerator kgen = KeyGenerator.getInstance("AES");
  66. SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
  67. sr.setSeed(seed);
  68. kgen.init(128, sr); // 192 and 256 bits may not be available
  69. SecretKey skey = kgen.generateKey();
  70. byte[] raw = skey.getEncoded();
  71. return raw;
  72. }
測试代码:
  1. <span style="font-family:Courier New;font-size:18px;"> String masterPassword = "test";
  2. String originalText = "0123456789";
  3. String encryptingCode = SimpleCrypto.encrypt(masterPassword,originalText);
  4. Log.i("加密结果为 ",encryptingCode);
  5. String decryptingCode = SimpleCrypto.decrypt(masterPassword, encryptingCode);
  6. Log.i("解密结果",decryptingCode); </span>

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

Android加密算法之AES加密和解密实现的更多相关文章

  1. php的AES加密、解密类

    <?php /** * php.ios.Android 通用的AES加密.解密方法 */ namespace Common\Business; class AESCrypt { /** * 初始 ...

  2. Android数据加密之Aes加密

    前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...

  3. java与C#、.NET AES加密、解密 解决方案

      1.情景展示 Java提供的密钥,C#无法解密. 2.原因分析 在Java中,AES的实际密钥需要用到KeyGenerator 和 SecureRandom,但是C#和.NET 里面没有这2个类, ...

  4. java AES加密、解密(兼容windows和linux)

      java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...

  5. polarssl rsa & aes 加密与解密

    上周折腾加密与解密,用了openssl, crypto++, polarssl, cyassl, 说起真的让人很沮丧,只有openssl & polarssl两个库的RSA & AES ...

  6. polarssl rsa & aes 加密与解密<转>

    上周折腾加密与解密,用了openssl, crypto++, polarssl, cyassl, 说起真的让人很沮丧,只有openssl & polarssl两个库的RSA & AES ...

  7. Php AES加密、解密与Java互操作的问题

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  8. 探讨数据进行AES加密和解密以及.NET Core对加密和解密为我们提供了什么?

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  9. 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

随机推荐

  1. 树形DP求树的最小支配集,最小点覆盖,最大独立集

    一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合时此点还需要被覆盖,被覆盖也有两种状态,即被子节点覆盖或者被父节点覆盖.总结起来就是三种状态,现对 ...

  2. 训练指南 UVA - 11383(KM算法的应用 lx+ly >=w(x,y))

    layout: post title: 训练指南 UVA - 11383(KM算法的应用 lx+ly >=w(x,y)) author: "luowentaoaa" cata ...

  3. Tarjan+topsort(DP)【P3387】 [模板]缩点

    Description 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次 ...

  4. 洛谷——P1591 阶乘数码

    P1591 阶乘数码 题目描述 求n!中某个数码出现的次数. 输入输出格式 输入格式: 第一行为t(≤10),表示数据组数.接下来t行,每行一个正整数n(≤1000)和数码a. 输出格式: 对于每组数 ...

  5. [POJ1801]Formula Racing(模拟)

    Formula Racing Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 289   Accepted: 77 Descr ...

  6. POJ 2559 Largest Rectangle in a Histogram(单调栈)

    [题目链接] http://poj.org/problem?id=2559 [题目大意] 给出一些宽度为1的长方形下段对其后横向排列得到的图形,现在给你他们的高度, 求里面包含的最大长方形的面积 [题 ...

  7. STL之vector3

    描述 将n个数字输入到vector里,并对其进行从大到小排序并输出. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { vector<int> vec ...

  8. Android证书验证存漏洞 开发者身份信息可被篡改(转)

    原帖地址:http://bbs.pediy.com/showthread.php?p=1335278#post1335278 近期在国内网易,雷锋网等网站爆出谷歌市场上的索尼官方的备份与恢复应用&qu ...

  9. Git学习笔记(一) 安装及版本库介绍

    安装Git 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和 ...

  10. “自适应”高度的 textarea 文本输入框

    写在前面 那啥,在我的那个很安静的一个 CSS 群(群号:82991297)突然看到有人在问一个问题. 使用 css 如何实现:textarea 如何实现高度自适应? 当时看到这个问题的时候,我脑中只 ...