惠州市建设规划局网站,网站备案填写,温州百度推广排名,深圳市建设网思维导图 一、AES加解密
1.概述
1.1 概念
AES#xff1a; 高级加密标准#xff08;Advanced Encryption Standard#xff09;是一种对称加密的区块加密标准。
#xff08;1#xff09;替代DES的新一代分组加密算法
#xff08;2#xff09;支持三种长度密钥#x…思维导图 一、AES加解密
1.概述
1.1 概念
AES 高级加密标准Advanced Encryption Standard是一种对称加密的区块加密标准。
1替代DES的新一代分组加密算法
2支持三种长度密钥128、192、256位
1.2 加解密过程
分组加密、分组解密
1.2.1 分组加解密
将待加解密的内容按照128位分组将密钥按照128位、192位、256位分组分别将分组后的明文与相应分组后的密钥加解密。
1明文与密钥分组 明文分组 每组长度相等都是128位16字节 密钥分组 有128位、192位、256位推荐加密轮数分别为 10、12、14
2密钥组处理
以每组128位为例
推荐加密轮数为10前9次执行操作一样第10次有所不同
3加密
明文与密钥分组后对每组如下操作 明文组与密钥组处理 ---- 轮密钥加 ---- 10轮加密 ---- 密文组
4解密
对每组如下操作 密文组 ---- 轮密钥加 ---- 10轮加密 ---- 明文组
1.2.2 4种操作 1AddRoundKey 轮密钥加 矩阵中的每一个字节都与该次轮密钥Round Key做XOR运算 每个子密钥由密钥生成方案产生
2SubBytes字节替代
通过非线性的替代函数用查找表的方式把每个字节替换成对应的字节。
3ShiftRows行移位
将矩阵中的每个横列进行循环式移位
4MixColumns 列混淆 为了充分混合矩阵中各个直行 使用线性转换来混合每列的4个字节
1.2.2 明文填充模式
1为什么要填充 如一段明文长度是192位如果按每128位拆第二个明文块只有64位不足128位就需要对明文块进行填充
2分类 NoPadding 不做任何填充但是要求明文必须是16字节128bit的整数倍。 PKCS5Padding默认 如果明文块少于16个字节128bit在明文块末尾补足相应数量的字符。 且每个字节的值等于缺少的字符数。
如明文{1,2,3,4,5,a,b,c,d,e},缺少6个字节则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6}
ISO10126Padding 如果明文块少于16个字节128bit在明文块末尾补足相应数量的字符。 最后一个字符值等于缺少的字符数其他字符填充随机数。
如明文{1,2,3,4,5,a,b,c,d,e},缺少6个字节则可能补全为{1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}
1.3 Java实现
注意 AES加密包含Base64加密
加密 AES加密 - Base64加密 - 密文解密 Base64解密 - AES解密 - 明文测试地址http://tool.chacuo.net/cryptaes1.3.1 Java代码 import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Base64Utils;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;/*** AES加密工具类* author kevin*/
public class AESUtil {/*** 日志相关*/private static final Logger LOGGER LoggerFactory.getLogger(AESUtil.class);/*** 编码*/private static final String ENCODING UTF-8;/*** 算法定义*/private static final String AES_ALGORITHM AES;/*** 指定填充方式*/private static final String CIPHER_PADDING AES/ECB/PKCS5Padding;private static final String CIPHER_CBC_PADDING AES/CBC/PKCS5Padding;/*** 偏移量(CBC中使用增强加密算法强度)*/private static final String IV_SEED 1234567812345678;private static final String AES_KEY equ6drp6nrwmgf1t;/*** AES加密* param content 待加密内容*/public static String encrypt(String content){if(StringUtils.isBlank(content)){LOGGER.info(AES encrypt: the content is null!);return null;}//判断秘钥是否为16位if(StringUtils.isNotBlank(AES_KEY) AES_KEY.length() 16){try {//对密码进行编码byte[] bytes AES_KEY.getBytes(ENCODING);//设置加密算法生成秘钥SecretKeySpec skeySpec new SecretKeySpec(bytes, AES_ALGORITHM);// 算法/模式/补码方式Cipher cipher Cipher.getInstance(CIPHER_PADDING);//选择加密cipher.init(Cipher.ENCRYPT_MODE, skeySpec);//根据待加密内容生成字节数组byte[] encrypted cipher.doFinal(content.getBytes(ENCODING));//返回base64字符串return Base64Utils.encodeToString(encrypted);} catch (Exception e) {LOGGER.info(AES encrypt exception: e.getMessage());throw new RuntimeException(e);}}else {LOGGER.info(AES encrypt: the AES_KEY is null or error!);return null;}}/*** 解密* param content 待解密内容*/public static String decrypt(String content){if(StringUtils.isBlank(content)){LOGGER.info(AES decrypt: the content is null!);return null;}//判断秘钥是否为16位if(StringUtils.isNotBlank(AES_KEY) AES_KEY.length() 16){try {//对密码进行编码byte[] bytes AES_KEY.getBytes(ENCODING);//设置解密算法生成秘钥SecretKeySpec skeySpec new SecretKeySpec(bytes, AES_ALGORITHM);// 算法/模式/补码方式Cipher cipher Cipher.getInstance(CIPHER_PADDING);//选择解密cipher.init(Cipher.DECRYPT_MODE, skeySpec);//先进行Base64解码byte[] decodeBase64 Base64Utils.decodeFromString(content);//根据待解密内容进行解密byte[] decrypted cipher.doFinal(decodeBase64);//将字节数组转成字符串return new String(decrypted, ENCODING);} catch (Exception e) {LOGGER.info(AES decrypt exception: e.getMessage());throw new RuntimeException(e);}}else {LOGGER.info(AES decrypt: the AES_KEY is null or error!);return null;}}/*** AES_CBC加密* param content 待加密内容*/public static String encryptCBC(String content){if(StringUtils.isBlank(content)){LOGGER.info(AES_CBC encrypt: the content is null!);return null;}//判断秘钥是否为16位if(StringUtils.isNotBlank(AES_KEY) AES_KEY.length() 16){try {//对密码进行编码byte[] bytes AES_KEY.getBytes(ENCODING);//设置加密算法生成秘钥SecretKeySpec skeySpec new SecretKeySpec(bytes, AES_ALGORITHM);// 算法/模式/补码方式Cipher cipher Cipher.getInstance(CIPHER_CBC_PADDING);//偏移IvParameterSpec iv new IvParameterSpec(IV_SEED.getBytes(ENCODING));//选择加密cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);//根据待加密内容生成字节数组byte[] encrypted cipher.doFinal(content.getBytes(ENCODING));//返回base64字符串return Base64Utils.encodeToString(encrypted);} catch (Exception e) {LOGGER.info(AES_CBC encrypt exception: e.getMessage());throw new RuntimeException(e);}}else {LOGGER.info(AES_CBC encrypt: the AES_KEY is null or error!);return null;}}/*** AES_CBC解密* param content 待解密内容*/public static String decryptCBC(String content){if(StringUtils.isBlank(content)){LOGGER.info(AES_CBC decrypt: the content is null!);return null;}//判断秘钥是否为16位if(StringUtils.isNotBlank(AES_KEY) AES_KEY.length() 16){try {//对密码进行编码byte[] bytes AES_KEY.getBytes(ENCODING);//设置解密算法生成秘钥SecretKeySpec skeySpec new SecretKeySpec(bytes, AES_ALGORITHM);//偏移IvParameterSpec iv new IvParameterSpec(IV_SEED.getBytes(ENCODING));// 算法/模式/补码方式Cipher cipher Cipher.getInstance(CIPHER_CBC_PADDING);//选择解密cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);//先进行Base64解码byte[] decodeBase64 Base64Utils.decodeFromString(content);//根据待解密内容进行解密byte[] decrypted cipher.doFinal(decodeBase64);//将字节数组转成字符串return new String(decrypted, ENCODING);} catch (Exception e) {LOGGER.info(AES_CBC decrypt exception: e.getMessage());throw new RuntimeException(e);}}else {LOGGER.info(AES_CBC decrypt: the AES_KEY is null or error!);return null;}}/*** 获取随机AES密钥*/private static String getAESKey(){return RandomStringUtils.random(16, abcdefghijklmnopqrstuvwxyz1234567890);}public static void main(String[] args) {// AES支持三种长度的密钥128位、192位、256位。// 代码中这种就是128位的加密密钥16字节 * 8位/字节 128位。String aesResult encrypt(测试AES加密);System.out.println(AES加密结果: aesResult);System.out.println();System.out.println(---------解密---------);String decrypt decrypt(aesResult);System.out.println(AES解密结果: decrypt);System.out.println();System.out.println(--------AES_CBC加密解密---------);String cbcResult encryptCBC(测试AESCBC加密);System.out.println(AES_CBC加密结果: cbcResult);System.out.println();System.out.println(---------AES_CBC解密---------);String cbcDecrypt decryptCBC(cbcResult);System.out.println(AES_CBC解密结果: cbcDecrypt);System.out.println();}
}
1.3.2 执行结果
AES加密结果:CSx/Cg6F7paoo9J7AujBYg---------解密---------
AES解密结果:测试AES加密--------AES_CBC加密解密---------
AES_CBC加密结果:hmlwSKLW91JhGMqEFozBLzidi6YRVjei0Hw1QkW07ac---------AES_CBC解密---------
AES_CBC解密结果:测试AESCBC加密1.3.3线上验证
验证地址http://tool.chacuo.net/cryptaes 另附安卓代码实现如下 AES加密(二) — Aes256带偏移量加/解密 下一篇跳转–信息安全一 本篇文章主要参考链接如下 参考链接1-Java实现加密一AES加解密 持续更新中…
随心所往看见未来。Follow your heartsee light
欢迎点赞、关注、留言一起学习、交流 文章转载自: http://www.morning.npmcf.cn.gov.cn.npmcf.cn http://www.morning.pznhn.cn.gov.cn.pznhn.cn http://www.morning.ctlzf.cn.gov.cn.ctlzf.cn http://www.morning.snzgg.cn.gov.cn.snzgg.cn http://www.morning.ydnx.cn.gov.cn.ydnx.cn http://www.morning.xmwdt.cn.gov.cn.xmwdt.cn http://www.morning.fqnql.cn.gov.cn.fqnql.cn http://www.morning.bsghk.cn.gov.cn.bsghk.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.trnhy.cn.gov.cn.trnhy.cn http://www.morning.tqbqb.cn.gov.cn.tqbqb.cn http://www.morning.nmwgd.cn.gov.cn.nmwgd.cn http://www.morning.dmtld.cn.gov.cn.dmtld.cn http://www.morning.wcgcm.cn.gov.cn.wcgcm.cn http://www.morning.hpkgm.cn.gov.cn.hpkgm.cn http://www.morning.wktbz.cn.gov.cn.wktbz.cn http://www.morning.gydth.cn.gov.cn.gydth.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.rzczl.cn.gov.cn.rzczl.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.bpwfr.cn.gov.cn.bpwfr.cn http://www.morning.mhcys.cn.gov.cn.mhcys.cn http://www.morning.brfxt.cn.gov.cn.brfxt.cn http://www.morning.kpgms.cn.gov.cn.kpgms.cn http://www.morning.tqfnf.cn.gov.cn.tqfnf.cn http://www.morning.qtwd.cn.gov.cn.qtwd.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.nflpk.cn.gov.cn.nflpk.cn http://www.morning.wbdm.cn.gov.cn.wbdm.cn http://www.morning.fqklt.cn.gov.cn.fqklt.cn http://www.morning.fgsqz.cn.gov.cn.fgsqz.cn http://www.morning.yfddl.cn.gov.cn.yfddl.cn http://www.morning.tpwrm.cn.gov.cn.tpwrm.cn http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn http://www.morning.c7495.cn.gov.cn.c7495.cn http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.xcjbk.cn.gov.cn.xcjbk.cn http://www.morning.bwttj.cn.gov.cn.bwttj.cn http://www.morning.prfrb.cn.gov.cn.prfrb.cn http://www.morning.qgmbx.cn.gov.cn.qgmbx.cn http://www.morning.bmfqg.cn.gov.cn.bmfqg.cn http://www.morning.fqtzn.cn.gov.cn.fqtzn.cn http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.njntp.cn.gov.cn.njntp.cn http://www.morning.ykswq.cn.gov.cn.ykswq.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.pdmsj.cn.gov.cn.pdmsj.cn http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn http://www.morning.rwpjq.cn.gov.cn.rwpjq.cn http://www.morning.czxrg.cn.gov.cn.czxrg.cn http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn http://www.morning.kfwrq.cn.gov.cn.kfwrq.cn http://www.morning.mfnsn.cn.gov.cn.mfnsn.cn http://www.morning.fsfz.cn.gov.cn.fsfz.cn http://www.morning.dwfzm.cn.gov.cn.dwfzm.cn http://www.morning.cftkz.cn.gov.cn.cftkz.cn http://www.morning.zzgkk.cn.gov.cn.zzgkk.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn http://www.morning.yhxhq.cn.gov.cn.yhxhq.cn http://www.morning.bmhc.cn.gov.cn.bmhc.cn http://www.morning.nhgkm.cn.gov.cn.nhgkm.cn http://www.morning.xtdtt.cn.gov.cn.xtdtt.cn http://www.morning.skcmt.cn.gov.cn.skcmt.cn http://www.morning.wyppp.cn.gov.cn.wyppp.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn http://www.morning.gzzxlp.com.gov.cn.gzzxlp.com http://www.morning.mqss.cn.gov.cn.mqss.cn http://www.morning.yqpzl.cn.gov.cn.yqpzl.cn http://www.morning.bdkhl.cn.gov.cn.bdkhl.cn http://www.morning.mygbt.cn.gov.cn.mygbt.cn http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn http://www.morning.cknws.cn.gov.cn.cknws.cn http://www.morning.zwxfj.cn.gov.cn.zwxfj.cn http://www.morning.yjxfj.cn.gov.cn.yjxfj.cn http://www.morning.yfddl.cn.gov.cn.yfddl.cn http://www.morning.lokext.com.gov.cn.lokext.com