版权声明:本文为博主原创文章,未经博主允许不得转载。

【AES】

一种对称加密算法,DES的取代者。

加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

【代码】

代码比较多,有一部分非本文章内容代码,具体自己看吧。

  1. package com.uikoo9.util.encrypt;
  2. import java.math.BigInteger;
  3. import java.security.MessageDigest;
  4. import java.security.SecureRandom;
  5. import javax.crypto.Cipher;
  6. import javax.crypto.KeyGenerator;
  7. import javax.crypto.spec.SecretKeySpec;
  8. import sun.misc.BASE64Decoder;
  9. import sun.misc.BASE64Encoder;
  10. import com.uikoo9.util.QStringUtil;
  11. /**
  12. * 编码工具类
  13. * 1.将byte[]转为各种进制的字符串
  14. * 2.base 64 encode
  15. * 3.base 64 decode
  16. * 4.获取byte[]的md5值
  17. * 5.获取字符串md5值
  18. * 6.结合base64实现md5加密
  19. * 7.AES加密
  20. * 8.AES加密为base 64 code
  21. * 9.AES解密
  22. * 10.将base 64 code AES解密
  23. * @author uikoo9
  24. * @version 0.0.7.20140601
  25. */
  26. public class QEncodeUtil {
  27. public static void main(String[] args) throws Exception {
  28. String content = "我爱你";
  29. System.out.println("加密前:" + content);
  30. String key = "123456";
  31. System.out.println("加密密钥和解密密钥:" + key);
  32. String encrypt = aesEncrypt(content, key);
  33. System.out.println("加密后:" + encrypt);
  34. String decrypt = aesDecrypt(encrypt, key);
  35. System.out.println("解密后:" + decrypt);
  36. }
  37. /**
  38. * 将byte[]转为各种进制的字符串
  39. * @param bytes byte[]
  40. * @param radix 可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制
  41. * @return 转换后的字符串
  42. */
  43. public static String binary(byte[] bytes, int radix){
  44. return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数
  45. }
  46. /**
  47. * base 64 encode
  48. * @param bytes 待编码的byte[]
  49. * @return 编码后的base 64 code
  50. */
  51. public static String base64Encode(byte[] bytes){
  52. return new BASE64Encoder().encode(bytes);
  53. }
  54. /**
  55. * base 64 decode
  56. * @param base64Code 待解码的base 64 code
  57. * @return 解码后的byte[]
  58. * @throws Exception
  59. */
  60. public static byte[] base64Decode(String base64Code) throws Exception{
  61. return QStringUtil.isEmpty(base64Code) ? null : new BASE64Decoder().decodeBuffer(base64Code);
  62. }
  63. /**
  64. * 获取byte[]的md5值
  65. * @param bytes byte[]
  66. * @return md5
  67. * @throws Exception
  68. */
  69. public static byte[] md5(byte[] bytes) throws Exception {
  70. MessageDigest md = MessageDigest.getInstance("MD5");
  71. md.update(bytes);
  72. return md.digest();
  73. }
  74. /**
  75. * 获取字符串md5值
  76. * @param msg
  77. * @return md5
  78. * @throws Exception
  79. */
  80. public static byte[] md5(String msg) throws Exception {
  81. return QStringUtil.isEmpty(msg) ? null : md5(msg.getBytes());
  82. }
  83. /**
  84. * 结合base64实现md5加密
  85. * @param msg 待加密字符串
  86. * @return 获取md5后转为base64
  87. * @throws Exception
  88. */
  89. public static String md5Encrypt(String msg) throws Exception{
  90. return QStringUtil.isEmpty(msg) ? null : base64Encode(md5(msg));
  91. }
  92. /**
  93. * AES加密
  94. * @param content 待加密的内容
  95. * @param encryptKey 加密密钥
  96. * @return 加密后的byte[]
  97. * @throws Exception
  98. */
  99. public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {
  100. KeyGenerator kgen = KeyGenerator.getInstance("AES");
  101. kgen.init(128, new SecureRandom(encryptKey.getBytes()));
  102. Cipher cipher = Cipher.getInstance("AES");
  103. cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"));
  104. return cipher.doFinal(content.getBytes("utf-8"));
  105. }
  106. /**
  107. * AES加密为base 64 code
  108. * @param content 待加密的内容
  109. * @param encryptKey 加密密钥
  110. * @return 加密后的base 64 code
  111. * @throws Exception
  112. */
  113. public static String aesEncrypt(String content, String encryptKey) throws Exception {
  114. return base64Encode(aesEncryptToBytes(content, encryptKey));
  115. }
  116. /**
  117. * AES解密
  118. * @param encryptBytes 待解密的byte[]
  119. * @param decryptKey 解密密钥
  120. * @return 解密后的String
  121. * @throws Exception
  122. */
  123. public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {
  124. KeyGenerator kgen = KeyGenerator.getInstance("AES");
  125. kgen.init(128, new SecureRandom(decryptKey.getBytes()));
  126. Cipher cipher = Cipher.getInstance("AES");
  127. cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(kgen.generateKey().getEncoded(), "AES"));
  128. byte[] decryptBytes = cipher.doFinal(encryptBytes);
  129. return new String(decryptBytes);
  130. }
  131. /**
  132. * 将base 64 code AES解密
  133. * @param encryptStr 待解密的base 64 code
  134. * @param decryptKey 解密密钥
  135. * @return 解密后的string
  136. * @throws Exception
  137. */
  138. public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {
  139. return QStringUtil.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr), decryptKey);
  140. }
  141. }

【输出】

    1. 加密前:我爱你
    2. 加密密钥和解密密钥:123456
    3. 加密后:A63fa7DjAe3yYji44BTm1g==
    4. 解密后:我爱你

Java 加密 AES 对称加密算法的更多相关文章

  1. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    版权声明:本文为博主原创文章,未经博主允许不得转载. [前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 [最简单的加密] 1.简单的概念 明文:加密前的 ...

  2. Java实现AES对称加密算法

    Java代码实现 import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGener ...

  3. java的AES对称加密和解密,有偏移量

    import java.math.BigDecimal; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; i ...

  4. AES对称加密算法实现:Java,C#,Golang,Python

    高级加密标准(Advanced Encryption Standard,简写AES),是一种用来替代DES的对称加密算法,相比DES,AES安全性更高,加密速度更快,因此被广泛使用. 理论上看,AES ...

  5. JAVA中AES对称加密和解密

    AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

  6. JAVA中AES对称加密和解密以及与Python兼容

    引言:本文主要解决Java中用AES加密及解密,同时可通过Python脚本对Java加密后的字符进行解密的操作. 由于近期工作中用到需要使用Java对一串密钥进行加密,并且后台通过Python语言读取 ...

  7. JAVA加解密 -- 对称加密算法与非对称加密算法

    对称加密算法:双方必须约定好算法 DES 数据加密标准:由于不断地被破解 自98年起就已经逐渐放弃使用 AES 目前使用最多的加密方式,官方并未公布加密方式已被破解,替代DES 实现和DES非常接近 ...

  8. Java加密AES算法及spring中应用

    开门见山直接贴上代码 .AESUtil加密解密工具类 import java.security.Key; import java.security.SecureRandom; import java. ...

  9. AES对称加密算法原理

    原著:James McCaffrey 翻译:小刀人 原文出处:MSDN Magazine November 2003 (Encrypt It) 本文的代码下载:msdnmag200311AES.exe ...

随机推荐

  1. easyui源码翻译1.32--ComboBox(下拉列表框)

    前言 扩展自$.fn.combo.defaults.使用$.fn.combobox.defaults重写默认值对象.下载该插件翻译源码 下拉列表框显示一个可编辑文本框和下拉式列表,用户可以选择一个值或 ...

  2. MyGui 3.2.0(OpenGL平台)的编译(五篇文章)

    MyGui是一个用来创建用户图形界面的库,用于游戏和3D应用程序.这个库的主要目标是达到:快速.灵活.易用. 1.下载准备: 源代码:http://svn.code.sf.net/p/my-gui/c ...

  3. 167. Two Sum II - Input array is sorted

    题目: Given an array of integers that is already sorted in ascending order, find two numbers such that ...

  4. Android 常用UI控件之TabHost(3)在4.0不显示图标的解决方案

    1,自定义 TabWidget 上每个tab的view 2,用多个图片

  5. 应付系统选项 Payables Options

    (N) AP > Setup > Options > Payables Options应付系统选项设置整个应付系统使用的控制项和默认值.我们可以在此窗口中设置默认值,从而简化供应商输 ...

  6. INCOIN Importing Multilingual Items (Doc ID 278126.1)

    APPLIES TO: Oracle Inventory Management - Version: 11.5.9 to 11.5.10.CU2 - Release: 11.5 to 11.5 GOA ...

  7. 解决WebService 测试窗体只能用于来自本地计算机的请求

    问题: 今天上 午,WebService部署成站点之后,如果在本地测试webservice可以运行,在远程却显示“测试窗体只能用于来自本地计算机的请求”或 者"The test form i ...

  8. BZOJ3166: [Heoi2013]Alo

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 394  Solved: 204[Submit][Status] ...

  9. kernel_task占用大量CPU

  10. web移动开发最佳实践之html篇

    一.前言 在目前的移动应用开发大潮下,使用web技术进行移动应用开发正变得越来越流行,它主要使用html5.css3.js等技术,在跨平台性.可移植性方面具有无可比拟的优势,特别适合开发对性能要求不太 ...