AES是一种对称加密方式,比DES更为安全,用一个秘钥加密数据之后,可以用同一个秘钥对加密后的数据解密还原,以下是一套以字符串为例子的使用全过程演示,

用到了

commons-codec.jar
 1 package testEncrypt;
 2
 3 import java.security.InvalidKeyException;
 4 import java.security.Key;
 5 import java.security.NoSuchAlgorithmException;
 6 import java.security.SecureRandom;
 7
 8 import javax.crypto.BadPaddingException;
 9 import javax.crypto.Cipher;
10 import javax.crypto.IllegalBlockSizeException;
11 import javax.crypto.KeyGenerator;
12 import javax.crypto.NoSuchPaddingException;
13 import javax.crypto.SecretKey;
14 import javax.crypto.spec.SecretKeySpec;
15
16 import org.apache.commons.codec.binary.Base64;
17 //import sun.misc.BASE64Encoder;
18 public class TestAesEncrypt {
19
20     public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
21         //随机生成密钥
22         KeyGenerator keygen = KeyGenerator.getInstance("AES");
23         //SecureRandom random = new SecureRandom(Base64.decodeBase64("abc"));
24         SecureRandom random = new SecureRandom();
25         keygen.init(random);
26         Key key = keygen.generateKey();
27         //获取秘钥字符串
28         String key64Str = Base64.encodeBase64String(key.getEncoded());
29         //要加密的数据
30         String dataStr="da89gh9qj3ebg9babjdslgbuqgb&FTUG^(GB";
31         System.out.println("要加密的数据:"+dataStr);
32
33         //还原秘钥字符串到秘钥byte数组
34         byte[] keyByteArray = Base64.decodeBase64(key64Str);
35         //重新形成秘钥,SecretKey是Key的子类
36         SecretKey secretKey = new SecretKeySpec(keyByteArray, "AES");
37
38         //初始化加密组件
39         Cipher cipher = Cipher.getInstance("AES");
40         cipher.init(Cipher.ENCRYPT_MODE, secretKey);
41
42         //加密后的数据,首先将字符串转为byte数组,然后加密,为便于保存先转为base64
43         String encryptedDataStr = Base64.encodeBase64String(cipher.doFinal(dataStr.getBytes()));
44         System.out.println("加密后的数据:"+encryptedDataStr);
45
46         //将加密组件的模式改为解密
47         cipher.init(Cipher.DECRYPT_MODE, secretKey);
48          //和上面的加密相反,先解base64,再解密,最后将byte数组转为字符串
49          String decodeDataStr = new String(cipher.doFinal(Base64.decodeBase64(encryptedDataStr)));
50          System.out.println("解密后的数据:"+decodeDataStr);
51     }
52
53 }

加密算法使用(四):AES的使用相关推荐

  1. 常见加密算法DES、AES和RSA的原理和特点

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 今天主要总结下常用的对称性加密算法DES和AES,非对称性加密算法RSA. 嵌入式专栏 1 DES加 ...

  2. Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。

    密码学综合工具 前言 git网址 项目结构 项目预览 String与byte[]互转 通过`String`类转换 通过`Base64`互转[jdk-8] 前言 我们网络信息安全的实验...要我们找各种 ...

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

    [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao) 2.简单的例子 ...

  4. java 可逆的加密算法_java实现AES可逆加密算法

    package com.hdu.encode; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import ...

  5. 加密算法详解AES/HmacSHA1/DES

    byte[] raw = sKey.getBytes("utf-8");SecretKeySpec skeySpec = new SecretKeySpec(raw, " ...

  6. aes加密算法 java实现,AES加密算法的java实现

    AES加密算法的java实现 package com.encryp; import java.security.InvalidKeyException; import java.security.No ...

  7. RC4算法原理、Java实现RC4加密算法、DES AES RC4算法比较

    DES AES RC4算法比较 根据密钥类型的不同,加密算法分为对称和非对称两种.对称加密系统是指加密和解密均采用同一把密钥. 对称加密算法是最常用的加密算法,优势在于算法公开,计算量小,加密效率高. ...

  8. 常用对称加密算法(DES/AES)类(PHP)

    看注释,啥也不说了,欢迎各种跨平台测试! /** * 常用对称加密算法类 * 支持密钥:64/128/256 bit(字节长度8/16/32) * 支持算法:DES/AES(根据密钥长度自动匹配使用: ...

  9. java aes对称加密算法_Java实现AES对称加密算法

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

  10. AES加密算法及逆向

    AES加密算法逆向以及特征识别 1.AES加密算法 关于AES加密算法,网上资料特别特别多,个人认为可以从这几点去学习: AES加密算法设计者的相关论文以及其他相关论文(如安全性.性能.硬件/指令实现 ...

最新文章

  1. 【转】HTTP Header 详解
  2. Response_输出数据,实现文件下载,定时刷新页面,是否缓存,重定向,实现验证码...
  3. SweetAlert插件 弹框插件
  4. 如何不部署Keras / TensorFlow模型
  5. MOSS/Sharepoint 如何更改一台已经安装了SharePoint的服务器名称
  6. 人工智障学习笔记——强化学习(4)时间差分方法
  7. nodejs 快速发布rtsp server
  8. 盒子模型(悬挂式布局)
  9. c++编写手机小游戏代码_手机也能编程?盘点这6个可以用手机编程的App!快收藏!...
  10. android创建项目,并开发项目。
  11. 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别【转】
  12. FishC笔记—15 讲 字符串:格式化
  13. 马拉车算法详解, C++代码实现
  14. ProE/Creo免费插件 MCADEx Tools 5.0
  15. 简单聊聊利用DNS服务器提供单一入口
  16. 10电脑睡眠后自动关机怎么回事 win_win10电脑睡眠变关机怎么解决_win10睡眠变自动关机的处理方法-系统城...
  17. 针对Object和Array深拷贝处理
  18. 特斯拉将粉丝创意注册为商标 包括电动皮卡版书包
  19. Lisseur Professionnel Ghd thé sont diurétiques et se traduira par nous
  20. WordPress数据库文章表(字段说明)

热门文章

  1. C++ Under the Hood
  2. java,js获取数组最大/小值
  3. java 调用dll 方法 postmessage实现后台模拟按键_VB实现模拟键盘及模拟鼠标(后台操作)...
  4. h5页面不可 移动_H5营销|为什么H5适合于微信营销
  5. Java运算符优先级和表达式及数据类型转换
  6. linux吉祥物的名字,知道Linux的吉祥物的名字和性别吗
  7. java throws catch_java中throws与try...catch的区别点
  8. java 生成随机数_Java 生成随机数的 N 种方法
  9. zabbix服务端远程执行命令
  10. 订单结算中最佳优惠券组合推荐策略分析