当前位置:   article > 正文

aes算法:观察明文2位变化对密文的影响_AES加密的工作模式ECB、CBC、CFB、OFB及案例...

aes算法:观察明文2位变化对密文的影响

616954a0b6f4f870e75b899ab1222828.png

这次换个玩法,作业先奉上~

作业案例

输入学号后两位数字 n,出生年份后两位数字 m (00后取99年)。

x1 = n mod 64,

x2 = (n + 20) mod 64,

x3 = (n + 40) mod 64,

初始向量 IV = m mod 64,

K = (1 0 0 1 1 0), Ek(z) = z ⊕ k

求四种模式下的y1, y2, y3?

Python版如下:

  1. # ECB模式
  2. def ecb_enc():
  3. return x1^key, x2^key, x3^key
  4. # CBC模式
  5. def cbc_enc():
  6. return (iv^x1)^key, (((iv^x1)^key)^x2)^key, (((((iv^x1)^key)^x2)^key)^x3)^key
  7. # OFB模式
  8. def ofb_enc():
  9. return x1^(iv^key), x2^((iv^key)^key), x3^(((iv^key)^key)^key)
  10. # CFB模式
  11. def cfb_enc():
  12. return x1^(iv^key), x2^(x1^(iv^key)^key), x3^(x2^(x1^(iv^key)^key)^key)
  13. # 输入学号后两位数字 n,出生年份后两位数字 m (00后取99年)。
  14. print('请输入学号后两位数字 n:')
  15. n = int(input())
  16. print('请输入出生年份后两位数字 m:')
  17. m = int(input())
  18. x1, x2, x3 = n % 64, (n + 20) % 64, (n + 40) % 64
  19. iv = m % 64
  20. k = '100110'
  21. key = int(k,2)
  22. print('x1={}, x2={}, x3={}'.format(x1,x2,x3))
  23. # 转为二进制后
  24. print('转为二进制后: x1={}, x2={}, x3={}'.format(bin(x1),bin(x2),bin(x3)))
  25. # ECB模式下
  26. ecb_y1, ecb_y2, ecb_y3 = ecb_enc()
  27. print('ECB模式下: y1={}, y2={}, y3={}, 二进制: y1={}, y2={}, y3={}'.format(ecb_y1, ecb_y2, ecb_y3, bin(ecb_y1), bin(ecb_y2), bin(ecb_y3)))
  28. # CBC模式下
  29. cbc_y1, cbc_y2, cbc_y3 = cbc_enc()
  30. print('CBC模式下: y1={}, y2={}, y3={}, 二进制: y1={}, y2={}, y3={}'.format(cbc_y1, cbc_y2, cbc_y3, bin(cbc_y1), bin(cbc_y2), bin(cbc_y3)))
  31. # OFB模式下
  32. ofb_y1, ofb_y2, ofb_y3 = ofb_enc()
  33. print('OFB模式下: y1={}, y2={}, y3={}, 二进制: y1={}, y2={}, y3={}'.format(ofb_y1, ofb_y2, ofb_y3, bin(ofb_y1), bin(ofb_y2), bin(ofb_y3)))
  34. # CFB模式下
  35. cfb_y1, cfb_y2, cfb_y3 = cfb_enc()
  36. print('CFB模式下: y1={}, y2={}, y3={}, 二进制: y1={}, y2={}, y3={}'.format(cfb_y1, cfb_y2, cfb_y3, bin(cfb_y1), bin(cfb_y2), bin(cfb_y3)))

运行结果如下:

fa2784aee9e54c92b71da53d3bbef4f8.png

开始正文

高级加密标准(Advanced Encryption Standard: AES)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范。其是对称加解密算法的最经典算法之一,它是一种分组加密标准,每个加密块大小为128位,允许的密钥长度为128、192和256位。这里只介绍ECB、CBC、CFB和OFB四种加密模式。

ECB(电子密码本模式)

之所以使用分组密码模式是因为分组密码只能处理定长的数据,如AES处理128bit,那么将明文切分成若干个128bit,分别加密。这种模式就是ECB模式,实际上有很明显的弱点,现在已经不被使用。

1147716d3548267352b271ec1df43079.png

ECB模式是最简单的一种,它有很严重的问题,就是相同的明文会得到同样的密文。因为每个分组加密方式和密钥都相同,若分组明文相同,加密后密文也相同。

CBC模式(密码分组链接模式)

CBC模式由IBM发明与1976年,在CBC模式中,每个平文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有密文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。

加密跟解密过程如下:

050ac191a5d6564b5a781b1f309edcd7.png

这里引入了初始化向量IV,因为第一组明文不存在"前一个密文",一般来说每次加密都会生成随机值来做初始 化向量。

CFB模式 (密文反馈模式)

CFB又称密文反馈模式,前一个密文分组会被送入密码算法的输入端,再将输出的结果与明文做异或。与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文。

加密跟解密过程如下:

69cb43d0b09ad277235fc24a2d69fdf6.png

OFB模式(输出反馈模式)

OFB又称输出反馈模式,前一组密码算法输出会输入到下一组密码算法输入。先用块加密器生成密钥流,然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。

55b9c05d88fad02ff1b655fe39fd31ea.png

改变一个明文分组对四种工作模式的影响

- ECB:只影响当前分组,但相同的明文分组产生相同的密文 ,分组的特点有时是一个严重的安全性弱点

- CBC:当前分组和后续分组都受影响,可用作认证码

- OFB:只影响当前分组,可用在卫星通信中

- CFB:当前分组和后续分组都受影响,可用作认证码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/177659
推荐阅读
相关标签
  

闽ICP备14008679号