经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
【Android】AES加密算法的Android实现
来源:cnblogs  作者:JiFengZ  时间:2021/5/6 17:32:59  对本文有异议

  1. 1
    import android.text.TextUtils;
  2. 2 import android.util.Base64;
  3. 3 import android.util.Log;
  4. 4
  5. 5 import javax.crypto.Cipher;
  6. 6 import javax.crypto.spec.IvParameterSpec;
  7. 7 import javax.crypto.spec.SecretKeySpec;
  8. 8
  9. 9 public class AESCBCUtils {
  10. 10 private static final String TAG = "AESCBCUtils";
  11. 11
  12. 12 // CBC(Cipher Block Chaining, 加密快链)模式,PKCS5Padding补码方式
  13. 13 // AES是加密方式 CBC是工作模式 PKCS5Padding是填充模式
  14. 14 /**
  15. 15 * 加解密算法/工作模式/填充方式
  16. 16 */
  17. 17 private static final String CBC_PKCS5_PADDING = "AES/CBC/PKCS5Padding";
  18. 18 // AES 加密
  19. 19 private static final String AES = "AES";
  20. 20
  21. 21 // 密钥偏移量
  22. 22 //private static final String mstrIvParameter = "1234567890123456";
  23. 23 /* key必须为16位,可更改为自己的key */
  24. 24 //String mstrTestKey = "1234567890123456";
  25. 25
  26. 26 // 加密
  27. 27 /**
  28. 28 * AES 加密
  29. 29 *
  30. 30 * @param strKey 加密密钥
  31. 31 * @param strClearText 待加密内容
  32. 32 * @param mstrIvParameter 密钥偏移量
  33. 33 * @return 返回Base64转码后的加密数据
  34. 34 */
  35. 35 public static String encrypt_AES(String strKey, String strClearText, String mstrIvParameter){
  36. 36
  37. 37 try {
  38. 38 byte[] raw = strKey.getBytes();
  39. 39 // 创建AES密钥
  40. 40 SecretKeySpec skeySpec = new SecretKeySpec(raw, AES);
  41. 41 // 创建密码器
  42. 42 Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
  43. 43 // 创建偏移量
  44. 44 IvParameterSpec iv = new IvParameterSpec(mstrIvParameter.getBytes());
  45. 45 // 初始化加密器
  46. 46 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
  47. 47 // 执行加密操作
  48. 48 byte[] cipherText = cipher.doFinal(strClearText.getBytes());
  49. 49 //Log.d(TAG, "encrypt result(not BASE64): " + cipherText.toString());
  50. 50 String strBase64Content = Base64.encodeToString(cipherText, Base64.DEFAULT); // encode it by BASE64 again
  51. 51 //Log.d(TAG, "encrypt result(BASE64): " + strBase64Content);
  52. 52 strBase64Content = strBase64Content.replaceAll(System.getProperty("line.separator"), "");
  53. 53
  54. 54 return strBase64Content;
  55. 55 } catch (Exception e) {
  56. 56 e.printStackTrace();
  57. 57 }
  58. 58
  59. 59 return null;
  60. 60 }
  61. 61
  62. 62 // 解密
  63. 63 /**
  64. 64 * AES 解密
  65. 65 *
  66. 66 * @param strKey 解密密钥
  67. 67 * @param strCipherText 待解密内容
  68. 68 * @param mstrIvParameter 偏移量
  69. 69 * @return 返回Base64转码后的加密数据
  70. 70 */
  71. 71 public static String decrypt(String strKey, String strCipherText, String mstrIvParameter) throws Exception {
  72. 72
  73. 73 try {
  74. 74 byte[] raw = strKey.getBytes("ASCII");
  75. 75 // 创建AES秘钥
  76. 76 SecretKeySpec skeySpec = new SecretKeySpec(raw, AES);
  77. 77 // 创建密码器
  78. 78 Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
  79. 79 // 创建偏移量
  80. 80 IvParameterSpec iv = new IvParameterSpec(mstrIvParameter.getBytes());
  81. 81 // 初始化解密器
  82. 82 cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
  83. 83 // 执行解密操作
  84. 84 byte[] cipherText = Base64.decode(strCipherText, Base64.DEFAULT); // decode by BASE64 first
  85. 85 //Log.d(TAG, "BASE64 decode result(): " + cipherText.toString());
  86. 86 byte[] clearText = cipher.doFinal(cipherText);
  87. 87 String strClearText = new String(clearText);
  88. 88 //Log.d(TAG, "decrypt result: " + strClearText);
  89. 89
  90. 90 return strClearText;
  91. 91 } catch (Exception e) {
  92. 92 e.printStackTrace();
  93. 93 }
  94. 94
  95. 95 return null;
  96. 96 }
  97. 97 }

 

在使用时可以直接调用:

  1. 1 //密钥
  2. 2 String AESKey = "1234567890123456";
  3. 3 //偏移量
  4. 4 String AESIv = "1234567890123456";
  5. 5
  6. 6 //密码加密
  7. 7 String pwdAES = AESCBCUtils.encrypt_AES(AESKey, loginPassword.getText().toString(), AESIv);
  8. 8 //用户名加密
  9. 9 String UserNameAES = AESCBCUtils.encrypt_AES(AESKey, loginAccount.getText().toString(), AESIv);

 

在线AES加解密验证 | 在线AES加解密

原文链接:http://www.cnblogs.com/jifengz/p/14703320.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号