带你详细了解AES算法《附带java、vue实现》 今头条

来源:腾讯云

2023-03-13 17:19:25


(相关资料图)

不论前途如何,不管发生什么事情,我们都不失去希望,希望是一种美德。——《雨果传》

1.加密算法

在密码学中,加密算法分为单向加密和双向加密。单向加密包括MD5SHA等摘要算法,它们是不可逆的。双向加密包括对称加密和非对称加密。双向加密是可逆的,存在密文的密钥。对称加密是指加密和解密使用相同的密钥,包括AES加密、DES加密等。非对称加密是指加密和解密使用不同的密钥,包括RSA加密等。

2.AES介绍

AES:高级加密标准(Advanced Encryption Standard)是美国联邦政府采用的一种区块加密标准,是目前最流行的一种对称加密算法

是用来替代DES的新一代分组加密算法。AES支持三种长度的密钥:128位、192位、256位。

3.AES的加密过程(AES处理单位:字节)

AES的加解密过程和DES一样,都是通过分组加密、分组解密。所谓分组加密,就是将待加解密的内容按照128位进行分组,将密钥按照128位、192位、256位进行分组,分别将分组后的明文与相应分组后的密钥进行加解密。

加密: 明文与密钥分组后,对每组:明文组与密钥组处理 -> 轮密钥加 -> 10轮加密 -> 密文组 解密: 对每组:密文组 -> 轮密钥加 -> 10轮解密 -> 明文组

明文分组: 每组长度相等,都是128位(16字节); 密钥分组: 有128位、192位、256位,推荐加密轮数分别为 10、12、14

密钥组处理: 以密钥分组每组128位为例(则推荐加密轮数为10,前9次执行操作一样,第十次有所不同) 类似地,128位密钥也是用字节为单位的矩阵表示,通过密钥编排函数,形成具有44个元素的序列W[0],W[1], … ,W[43](每个元素4个字节);其中,W[0],W[1],W[2],W[3]为原始密钥,其余40个元素分为10组,每组4个元素(4*4=16字节),分别用于10轮加密。

AES加密算法涉及4种操作: 字节替代(SubBytes)行移位(ShiftRows)列混淆(MixColumns)轮密钥加(AddRoundKey)。下图给出了AES加解密的流程:

AddRoundKey (轮密钥加)— 矩阵中的每一个字节都与该次轮密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。SubBytes(字节替代) — 通过非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。ShiftRows(行移位) — 将矩阵中的每个横列进行循环式移位。MixColumns (列混淆)— 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每列的四个字节。

4.代码实现

1.生成密钥

public static String genAesSecret(){    try {      KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");      //密钥长度,单位:字节,AES支持128、192、256字节长度的密钥,上面文章已介绍      keyGenerator.init(128);      SecretKey sk = keyGenerator.generateKey();      byte[] b = sk.getEncoded();      return Base64.encodeBase64String(b);    }    catch (NoSuchAlgorithmException e) {      e.printStackTrace();      throw new RuntimeException("没有此算法");    }  }

2.AES加密

public static String aesEncrypt(String content) throws Exception {    //指定加密算法    Cipher cipher = Cipher.getInstance("AES");    //创建加密规则:指定key和加密类型    SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET.getBytes(), "AES");    //指定加密模式为加密,指定加密规则    cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);    //调用加密方法    byte[] result = cipher.doFinal(content.getBytes());    //用Base64编码    return new String(java.util.Base64.getEncoder().encode(result));  }

3.AES解密

public static String aesDecrypt(String content) throws Exception {    //Base64解码    byte[] result = java.util.Base64.getDecoder().decode(content);    //指定加密算法    Cipher cipher = Cipher.getInstance("AES");    //创建加密规则:指定key和加密类型    SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET.getBytes(), "AES");    //指定加密模式为解密,指定加密规则    cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);    return new String(cipher.doFinal(result));  }

注意:SECRET.getBytes()我这里是一个常量密钥,通过密钥生成后写成常量SECRET

4.前端解密

安装依赖

npm install crypto-js --save-dev
// 引入import CryptoJS from "crypto-js"​// 密钥const AES_KEY = "P@S5W0rDK3yBACHU" // 后端提供​// 解密export function decrypt (word) {  var key = CryptoJS.enc.Utf8.parse(AES_KEY)  var decrypt = CryptoJS.AES.decrypt(word, key, {    mode: CryptoJS.mode.ECB,    padding: CryptoJS.pad.Pkcs7  })  return CryptoJS.enc.Utf8.stringify(decrypt).toString()}

5.Java测试用例

关键词:

带你详细了解AES算法《附带java、vue实现》 今头条

AES的加解密过程和DES一样,都是通过分组加密、分组解密。所谓分组加密,就是将待加解密的内容按照128位进行分组,将密钥按照128位、192位、25[详细]
2023-03-13

上市公司回购增持热情高涨,短短2个多月沪市新增26家次|最新消息

上市公司回购增持热情高涨,短短2个多月沪市新增26家次  作者:黄思瑜  今年以来,沪市公司回购和增持的热情较高。同日,轻纺城披露回购进[详细]
2023-03-13

当地时间3月12日,美国政府宣布了一项限制和阻止在阿拉斯加州和北冰洋进行石油和天然气钻探的计划,受限土地约1600万英亩 每日速读

当地时间3月12日,美国政府宣布了一项限制和阻止在阿拉斯加州和北冰洋进行石油和天然气钻探的计划,受限土地约1600万英亩。此举正值美国监管机[详细]
2023-03-13

基石药业-B(02616.HK)合作伙伴Blueprint Medicines公布泰吉华?治疗惰性系统性肥大细胞增多症的PIONEER注册性研究数据_全球观热点

基石药业-B(02616 HK)发布公告,该集团的合作伙伴BlueprintMedicinesCorporation(纳斯达克股份代号:BPMC)(BlueprintMedicines)近日在2023年美[详细]
2023-03-13

东莞附近有什么好玩的地方推荐_东莞哪里好玩

1、1 隐贤山庄,推荐指数:推荐理由:老少皆宜的好去处。门票价格:30元,开放时间:7:30-19:30。位于东莞常平镇[详细]
2023-03-13

林诗栋:大满贯首胜赢在备战 签运不佳对马龙全力拼-全球快消息

中国18岁小将林诗栋在对阵瑞典球员克里斯蒂安-卡尔森时基本掌控住了局面,最终3-1(11-7、11-13、11-9和11-8)战胜对手,晋级次轮。“抽签之后[详细]
2023-03-12

四只大熊猫凑一桌像在打麻将具体详细内容是什么|天天观热点

四只大熊猫凑一桌像在打麻将今天的热度非常高,现在也是在热搜榜上了,那么具体的四只大熊猫凑一桌像在打麻将是什么情况呢,大家[详细]
2023-03-12

麦克马纳曼:利物浦的表现和7-0战胜曼联截然相反,缺乏活力_天天微资讯

麦克马纳曼:利物浦的表现和7-0战胜曼联截然相反,缺乏活力,曼联,利物浦,英国足球,足球竞赛,欧冠八强,皇家马德里,诺丁汉森林,巴塞罗那队,足球[详细]
2023-03-12

慧眼识珠!霍楠仅花8万从福建签下林葳,本想打包曾凌铉但他想留在家乡-环球最资讯

慧眼识珠!霍楠仅花8万从福建签下林葳,本想打包曾凌铉但他想留在家乡[详细]
2023-03-12

世界热议:阈怎么读 拼音_阈怎么读

1、阈:yù门槛阈,门榍也。2、——《说文》阈,门限也。3、——《玉篇》柣谓之阈。4、——《尔雅》。5、注:“阈,门限。[详细]
2023-03-12
版权所有: 华中制冷网 All Rights Reserved
京ICP备12018864号-26
联系邮箱:2 913 236 @qq.com