当前位置: 首页 > 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/14570371/

相关文章:

  • 郑州红酒网站建设网站后台模板 免费
  • 专业团队优质网站建设方案深圳口碑最好的装修公司排名
  • ps网站首页直线教程园林景观设计公司计划书
  • 徐州建设网站做网站用lunx
  • 贷款网站开发个人网站建立教程
  • 备案网站查询效果好网站建设哪家好
  • 网站建设与规划实训总结猪八戒托管赏金做网站
  • 济南网站优化收费网页快速收录
  • 快递企业网站建设设计方案范例建设银行激活社保卡网站
  • 求职招聘网站开发深圳网站建设明细报价表
  • 网站的建设域名空间适合发软文的平台
  • 网站开发项目计划书ppt新媒体营销策略
  • 免费网站论坛南京自助网站推广建站
  • 在做网站的公司做网站运营犯法吗仁怀企业网站建设
  • wordpress 注册插件做优化排名会不会影响网站速度
  • 网站诊断表运维培训机构哪个好
  • 哪个网站做照片书最好看全方位营销型网站
  • 个人网站做多久有效果温州市网络科技有限公司
  • 免费自助小型网站如何seo推广工厂店
  • 石家庄科技网站建设wordpress多站点建站
  • 仿站下载工具平面设计软件图标图片
  • 有哪些官网做的比较好的网站网站建设全教程
  • 公司在选择网站时应考虑什么百度 营销推广怎么做
  • 傻瓜式网页制作网站苏州城乡建设网站查询
  • 智慧团建入口登录网站阿里服务器怎么做网站服务器
  • 大学生做网上英语翻译兼职网站商城类的网站怎么做
  • 定制网站制作系统长沙房地产管理局
  • 时光慢网站建设方案论文企业网站html模板
  • 英语网站案例做网站免费服务器哪家好
  • 如何使用ps做网站建设银行怎么从网站上改手机号码