博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java工具】AES CBC加密
阅读量:5768 次
发布时间:2019-06-18

本文共 3320 字,大约阅读时间需要 11 分钟。

一、定义

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在中又称Rijndael加密法,是采用的一种区块加密标准。这个标准用来替代原先的,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

二、AES加密方式的CBC模式

三、实现

1 package com.slp; 2 import javax.crypto.Cipher;   3 import javax.crypto.spec.IvParameterSpec;   4 import javax.crypto.spec.SecretKeySpec;   5 import sun.misc.BASE64Decoder;   6    7 public class Encryption   8 {   9     public static void main(String args[]) throws Exception {  10         System.out.println(encrypt());  11         System.out.println(desEncrypt());  12     }  13   14     /**15      * 加密16      * @return 17      * @throws Exception18      */19     public static String encrypt() throws Exception {  20         try {  21             String data = "plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize))";  22             String key = "1234567812345678";  23             String iv = "1234567812345678";  24   25             Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");  26             int blockSize = cipher.getBlockSize();  27   28             byte[] dataBytes = data.getBytes();  29             int plaintextLength = dataBytes.length;  30             if (plaintextLength % blockSize != 0) {  31                 plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));  32             } 33   34             byte[] plaintext = new byte[plaintextLength];  35             System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);  36             SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");  37             IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());  38   39             cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);  40             byte[] encrypted = cipher.doFinal(plaintext);  41   42             return new sun.misc.BASE64Encoder().encode(encrypted);  43   44         } catch (Exception e) {  45             e.printStackTrace();  46             return null;  47         }  48     }  49   50     /**51      * 解密52      * @return53      * @throws Exception54      */55     public static String desEncrypt() throws Exception {  56         try  57         {  58            // String data = "2fbwW9+8vPId2/foafZq6Q==";  59             String data = "s3EhlkBgcltfMAW13/K/rNMgqnymdSYNuF5pcHdO1jOVSh/jdZRrWlgQwKv76yO/VAhCU8FLa8M+ivLFEWwIdplTuP/posnYTgldCXDo53s=";60             String key = "1234567812345678";  61             String iv = "1234567812345678";  62               63             byte[] encrypted1 = new BASE64Decoder().decodeBuffer(data);  64               65             Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");  66             SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");  67             IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());  68               69             cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);  70    71             byte[] original = cipher.doFinal(encrypted1);  72             String originalString = new String(original);  73             return originalString.trim();  74         }  75         catch (Exception e) {  76             e.printStackTrace();  77             return null;  78         }  79     }  80 }

 

转载于:https://www.cnblogs.com/dream-to-pku/p/7171222.html

你可能感兴趣的文章
Oracle将NetBeans交给了Apache基金会
查看>>
填坑记:Uncaught RangeError: Maximum call stack size exceeded
查看>>
SpringCloud之消息总线(Spring Cloud Bus)(八)
查看>>
DLA实现跨地域、跨实例的多AnalyticDB读写访问
查看>>
实时编辑
查看>>
KVO原理分析及使用进阶
查看>>
【348天】每日项目总结系列086(2018.01.19)
查看>>
【JS基础】初谈JS现有的数据类型
查看>>
【294天】我爱刷题系列053(2017.11.26)
查看>>
Microsoft发布了Azure Bot Service和LUIS的GA版
查看>>
Google发布Puppeteer 1.0
查看>>
.NET开源现状
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
AMD改善Linux驱动,支持动态电源管理
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>