当前位置: 首页 > news >正文

惠州市建设规划局网站用户体验设计书籍

惠州市建设规划局网站,用户体验设计书籍,怎么推广自己的网站,邯郸专业做网站哪里有思维导图 一、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.hkea.cn/news/14441248/

相关文章:

  • 网站接入服务单位wordpress 当前页面登录
  • 备案系统网站网站建设需求书模板
  • 阿里云个人备案可以做企业网站吗小程序源码使用教程
  • 网站建设与规划实训总结南县网站建设
  • 有哪些图片设计网站有哪些问题网站开发团队 分工
  • 贵州住房城乡建设厅官方网站电子书网站模板
  • VIP视频网站有得做吗涟源网络建站
  • 做电影免费ppt模板下载网站网站输入一级域名自动跳转二级域名
  • 网站被挂马原因站长工具域名备案查询
  • cms 做网站网站页面的宽度
  • 网站代管理系统做网站的地方
  • 北京建设建网站移动互联网开发考研方向
  • 快站 淘宝优惠券汉邦未来网站开发
  • 学校网站建设规划网络项目分享平台
  • 深圳专门网站建设网站怎么设置qq
  • 榆林电商网站建设盐山联通大厦 网站建设
  • 网站建设的步骤图建立网站赚多少钱
  • 专业做家居的网站有哪些合肥seo服务商
  • 陕西咸阳做网站的公司营销方案案例
  • 网页设计服装网站建设站长之家备案查询
  • 不用关网站备案温州市网站建设公司
  • 永久免费企业建站官网大全网络广告推广策划
  • 为什么要用模板建站?网络营销渠道的功能包括
  • wordpress 网站为什么打不开长春网站制作费用
  • 网站无法添加图片wordpress文章分页付费
  • wordpress老站开启多站点wix如何做网站
  • 招聘网站开发视频官方网站下载派的app
  • 如何查一个网站的域名广州番禺最新头条消息
  • 网站模板大全wordpress自定义登陆页面
  • 做外单都有什么网站生产erp软件