前言:
新年伊始,小星谨代表星云博创恭祝大家新年快乐!技术“兔”飞猛进!工作大展宏“兔”!
本期技术分享将与大家以“AES算法详解”为主题,共同探讨如何利用AES加密算法对ECB模式进行加解密。
AES加密算法是密码学中的高级加密标准。AES为分组加密法,把明文分成每组长度相等的一组一组;每次加密一组数据,直至整个明文被加密完毕。在AES标准规范中,分组长度只能是128位。AES是按照字节进行加密的,也就是说每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位,但这会导致密钥长度不同,推荐加密的轮数也不同。
因为DES算法的不安全性,DES加密算法可以被破解。而3DES加密算法虽然还没有被破解,但是因其加解密效率低,所以基本上大家现在都会偏向使用AES算法。可以说,AES算法的提出就是为了替代DES算法。
1. 加密过程:最后一组“1轮最终轮(Final round)”中不存在右边的“3.列混合(MixColumns)”。
2. 初始变换:明文128位转换为16字节的矩阵如下,再与128位的秘钥(同理转换为16字节的矩阵)进行异或,得到第一次转换后结果。
初始变换的异或原理图片如下:
3. 开始9轮循环。
4. 字节代换,将初始变换后得到的数据在右边表格中进行代换。
变换后的结果如下:
5. 实施行移位操作。
行移位的结果如下:
6.实施列混合操作,左边矩阵为给定的矩阵。
举例如下:
7.轮秘钥加,对秘钥进行加操作。
代码参考:https://blog.csdn.net/chouzhou9701/article/details/122019967
总结
以上是针对ECB模式的加密解密,从例子中可以看出参数中存在限制:
1. 秘钥必须为16字节或者16字节的倍数的字节型数据。
2. 明文必须为16字节或者16字节的倍数的字节型数据,如果不足16字节,您需要对其进行补全。至于补全规则,后续在补全模式中会有具体介绍。
3. 其它参考:
3.1 通过CBC模式的示例。
3.2 AES相关赛题一 [ACTF新生赛2020]crypto-aes。
3.3 输出附件。
3.4 Wp:题目代码很简明,使用了一个密钥 Key和初始化向量IV,选择CBC模式进行加密的解题思路。
(1)解密flag,我们首先需要获取到 key 和 iv 的值,所需条件如下:
(2)由上述条件可知:key是32bytes,256bits;iv是16bytes,128bits。
(3)后续key的低128bits,与输出结果的低128bits相异或,所得的结果就是iv的值了。
(4)得到key,iv后直接aes.decrypt()解密即可。