<?xml version="1.0" encoding="utf-8"?> AES CBC模式下的CBC bit flipping Attack

AES CBC模式下的CBC bit flipping Attack

目录

  • 1. 简介
  • 2. 字节翻转攻击测试

1 简介

如果理解了上一篇的padding oracle attack,则CBC字节翻转攻击很容易理解,上一篇的最后也通过修改IV达到了修改第一个加密分组数据的效果。 CBC字节翻转也类似,在有加密IV并可以修改IV值和能获得服务器返回的明文结果的情况下,就能通过修改IV获得想要的明文结果。

2 字节翻转攻击测试

还以上一节的测试程序为例子。用字节翻转攻击修改解密后的明文。

测试请求数据:

def my_dec_req(data):'''测试解密,注意这里使用test_dec函数,直接解密出明文'''txt = b64_url_enc(bytes_to_str(base64.b64encode(data)))return test_dec(txt)test_txt = 'this is a long long test'
test1 = test_enc(test_txt)
test_data = base64.b64decode(b64_url_dec(test1))# 解密出原始明文
print('decoded text:', my_dec_req(test_data))

decoded text: this is a long long test

修改my_dec_req直接解密出明文。

cbc字节翻转的具体实现:

def data_xor(xs, ys):'''xor两个序列'''return bytes([x ^ y for (x, y) in zip(xs, ys)])def cbc_xor(data, fake_data, org_data):'''使用cbc xor构造第一个伪造数据
    data 加密后的密文,前16字节为iv
    fake_data 要伪造的明文
    org_data 原始明文,只要有前16个字节的明文即可'''data_is = data_xor(data[0:BS], bytes(org_data[0:BS], 'utf-8'))return build_fake_first(data, fake_data, data_is)new_data=cbc_xor(test_data, "admin pass", test_txt)from urllib.parse import quote
print("decoded text:", quote(my_dec_req(new_data)))

decoded text: admin%20pass%06%06%06%06%06%06ong%20test

可以看到前16字节明文被成功替换,不过因为伪造的字符串不够16个字节,添加了padding:

使用空格代替pkcs7 padding:

def pad_bs_space(s):'''不足一个分组长的字符串 填充空格'''return s + ' ' * (BS - len(s))new_data=cbc_xor(test_data, pad_bs_space("admin pass"), test_txt)
print("decoded text:", my_dec_req(new_data))

decoded text: admin pass      ong test

作者: ntestoc

Created: 2019-06-21 周五 18:14

转载于:https://www.cnblogs.com/ntestoc/p/11063894.html

AES CBC模式下的CBC bit flipping Attack相关推荐

  1. AES加密的工作模式ECB、CBC、CFB、OFB及案例

    高级加密标准(Advanced Encryption Standard: AES)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范.其是对称加解密算法的最经典算法之一,它是一 ...

  2. 分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR

    在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式).CBC(Cipher-block chaining,密码块连接模式).PCBC(Prop ...

  3. 分组密码的模式——ECB、CBC、CFB、OFB、CTR

    分组密码的模式 分组密码和流密码 ECB模式 CBC模式 CFB模式 OFB模式 CTR模式 分组密码模式比较表 分组密码和流密码 分组密码是每次只能处理特定长度的一块数据的一类密码算法,这里的&qu ...

  4. python aes加密 cbc_【转载】python AES CBC模式加密

    今天需要用到AES CBC模式加密,搜索了很久,终于加密成功,记录一下今天的理解. 首先要安装pycrypto库,不知道为什么在windows安装失败,在linux可以正常安装 这里有几点要注意,ke ...

  5. python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...

    1.chr()函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 2.s[a:b:c] s=(1,2,3,4,5) 1>. s[a]下标访 ...

  6. Java中的AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  7. 每日一课 | AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  8. 常用对称加密算法之AES算法-CBC模式

    这个需求很简单就是存储数据库密码,因为链接数据库的需要用到,加密就必须要用对称加密算法,于是简单调研了一下对称加密算法,经过对比最后选择了AES算法-CBC模式 怎么理解对称加密 加密:接收秘钥key ...

  9. AES加密解密(CBC模式)

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

最新文章

  1. Java知多少(中)
  2. 流量暴增,掌门教育如何基于 Spring Cloud Alibaba 构建微服务体系?
  3. Opencms安装和配置
  4. Java数据结构习题_算法分析
  5. nssl1522-简单数数题【dp】
  6. [luoguP2221] [HAOI2012]高速公路(线段树)
  7. 云市场合作伙伴-袋鼠云获A轮融资,成立一年半获三轮投资超亿元
  8. 洛谷——P1144 最短路计数
  9. iPhone苹果手机iOS14更新升级到iOS15需要多久?
  10. 全国计算机考试cad,全国计算机高新考试AUTO CAD.doc
  11. C++常用的图像像素值读写的方法
  12. “向死而生”的微信视频号,逆风翻盘的2020
  13. 什么是B2B,B2C,C2C?
  14. S.M.A.R.T原则:目标管理概念 - 让你的管理规范化
  15. java达内小发猫课程,详细说明
  16. github android 开源,Android github开源项目学习之—仿知乎APP(一)
  17. 笔记本加装SSD重装系统win10引导始终指向原系统的问题终极解决方法
  18. 精灵图案例-拼出自己名字
  19. 年龄计算机在线计算适合你的对象,抖音年龄计算器恋爱对象生日,年龄计算器适合你的恋爱对象...
  20. criteria 用法

热门文章

  1. Mac系统修改root用户密码,mac切换root用户登录实例演示
  2. C语言实现割线法求零点以及详解割线法
  3. 匹配printf()说明符的类型
  4. CTFshow 文件包含 web116
  5. 解决sublime3的标签页乱码(小方块)
  6. SDUT-2144 图结构练习——最小生成树
  7. log--求自然对数
  8. diag--创建对角矩阵
  9. 两字典(dict)组合(重复键进行加法)一行命令实现Python
  10. 强连通分量的分解(转博客园)