CBC字节翻转攻击例子

前言

某次玩CTF遇到的题目,记录一下

原理

CBC解密会跟前一组(16字节为一组)进行xor,这样就可以在不知道key的情况下达到修改原文某些字节的目的,但是会造成密文部分字节被破坏,所有有一定局限性。

解题

#-*-coding:utf-8-*-
import base64


'''
    CBC字节翻转攻击例子
    已知密文和原文,要求修改密文中uid=1达到攻击目的。
    
    原文:
    1234567890abcdef1234567890abcdef1234567890abcdef1234567890auid=9;123123123123
    密文(经base64编码):
    9pzE4775q38+wGl/FqNMfFM53Ra6wTKAGUykoeioOjKzlajhqgjsPjGiXVvkFF2BwdywFE67ELLaNuU5yS0kjiuETsjG0Jdk4LiwwBst8ig=
    
    解题:
    原文分成16字符一组
    1234567890abcdef
    1234567890abcdef
    1234567890abcdef
    1234567890auid=9;
    123123123123
'''

enc='9pzE4775q38+wGl/FqNMfFM53Ra6wTKAGUykoeioOjKzlajhqgjsPjGiXVvkFF2BwdywFE67ELLaNuU5yS0kjiuETsjG0Jdk4LiwwBst8ig='

_enc = base64.b64decode(enc)
uid = chr(ord(_enc[16*3-1])^ord('9')^ord('1'))

_enc2list = list(_enc)
_enc2list[16*3-1] = uid
_enc = ''.join(_enc2list)

x_enc = base64.b64encode(_enc)
print x_enc

  

转载于:https://www.cnblogs.com/hellotimo/p/10996372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值