AES字節(jié)翻轉(zhuǎn)

AES CBC mode 加密字節(jié)反轉(zhuǎn)測(cè)試

字節(jié)翻轉(zhuǎn)例子很多啦神凑,筆者直接上代碼。我們的目的是使明文分組1解析后是我們的目標(biāo)字符之斯。

import base64

from Crypto.Cipher import AES
from Crypto.Util import *
from Crypto.Util.strxor import strxor

# 初始密鑰, 密鑰需要雙方約定且保密, 且不允許傳輸.
key = b'1234567890123456'

# 初始化向量, 該值允許傳輸.
init_v = b'ABCDEFGH12345678'


def encrypt(v: bytes, plain_text: bytes):
    """
    加密
    :param v: 初始化向量
    :param plain_text: 明文數(shù)據(jù)
    :return:
    """
    aes_encrypt = AES.new(key, AES.MODE_CBC, IV=v)
    _pad_data = Padding.pad(plain_text, AES.block_size, "pkcs7")
    _data = aes_encrypt.encrypt(_pad_data)
    print('密文數(shù)據(jù): ', _data, ', 長(zhǎng)度: ', len(_data))
    for i in range(0, len(_data), 16):
        tmp = _data[i: 16+i]
        print('密文分組: %s, 密文數(shù)據(jù): %s, 長(zhǎng)度: %s' % (str(i//16), tmp, len(tmp)))
    return base64.b64encode(_data)


def decrypt(v: bytes, cipher: bytes):
    """
    解密
    :param v: 初始化向量
    :param cipher: 密文
    :return:
    """
    aes_decrypt = AES.new(key, AES.MODE_CBC, IV=v)
    plaintext = aes_decrypt.decrypt(base64.b64decode(cipher))
    plaintext = Padding.unpad(plaintext, AES.block_size, "pkcs7")
    return plaintext


def attack(cipher, local, before, target, n):
    """
    公式: Cipher0[x] = P1[0] xor Cipher0[x] xor 'a'
    :param cipher: 密文
    :param local: 當(dāng)前分組密文
    :param before: 當(dāng)前分組待修改字符原始明文
    :param target: 當(dāng)前分組待修改字符目標(biāo)明文
    :param n: 分組, 從0開(kāi)始計(jì)算
    :return:
    """
    cipher = base64.b64decode(cipher)
    cipher = list(cipher)
    cipher[local - 16 * n] = cipher[local - 16 * n] ^ ord(before) ^ ord(target)
    cipher = base64.b64encode(bytes(cipher))
    return cipher


def fix_iv(p1, new_p1):
    """
    公式: NewIV = p0原始 xor p0損壞 xor old_iv
    :param p1: 原始明文
    :param new_p1: 新的明文
    :return:
    """
    fixed_iv = strxor(init_v, strxor(p1[0:16], new_p1[0:16]))
    print('修復(fù)后的iv: ', fixed_iv)
    return fixed_iv


def test_bit_flip():
    plain_text = b'0123456789abcdefjhijkl3mnopqrstuvwxyz'
    print('明文數(shù)據(jù): ', plain_text, ', 長(zhǎng)度: ', len(plain_text))
    for i in range(0, len(plain_text), 16):
        tmp = plain_text[i: 16 + i]
        print('明文分組: %s, 明文數(shù)據(jù): %s, 長(zhǎng)度: %s' % (str(i // 16), tmp, len(tmp)))
    cipher = encrypt(init_v, plain_text)
    print('密文Base64編碼: ', cipher, end='\r\n')
    print('修改原始明文第22個(gè)字符 "%s" 為任意字符,即第二組第6個(gè)數(shù)據(jù).' % chr(plain_text[22]))
    ipt = input('修改后的字符>')
    n = 1
    cipher = attack(cipher, 16 * n + 6, '3', ipt, n)
    decipher = decrypt(init_v, cipher)
    print('新的明文無(wú)法decode, 因?yàn)榈?組密文已經(jīng)損壞, 但字符已經(jīng)翻轉(zhuǎn)成功: ', decipher)

    print('準(zhǔn)備修復(fù)IV解析完整明文')
    fixed_iv = fix_iv(plain_text, decipher)
    decipher = decrypt(fixed_iv, cipher)
    print('修復(fù)IV后解析明文:', decipher)


if __name__ == '__main__':
    test_bit_flip()
明文數(shù)據(jù):  b'0123456789abcdefjhijkl3mnopqrstuvwxyz' , 長(zhǎng)度:  37
明文分組: 0, 明文數(shù)據(jù): b'0123456789abcdef', 長(zhǎng)度: 16
明文分組: 1, 明文數(shù)據(jù): b'jhijkl3mnopqrstu', 長(zhǎng)度: 16
明文分組: 2, 明文數(shù)據(jù): b'vwxyz', 長(zhǎng)度: 5
密文數(shù)據(jù):  b'\x7f\xa4O)Q\xbdv~\xe7Px>l\xdf\x84\x149<\xac\xcf?\xad\xe1\x91?\xf3->k\xd8\x10\xdc\xdeON\x99\xfd\x87\xe3\xe8\xc6\x883\xff\x19\xae"\x05' , 長(zhǎng)度:  48
密文分組: 0, 密文數(shù)據(jù): b'\x7f\xa4O)Q\xbdv~\xe7Px>l\xdf\x84\x14', 長(zhǎng)度: 16
密文分組: 1, 密文數(shù)據(jù): b'9<\xac\xcf?\xad\xe1\x91?\xf3->k\xd8\x10\xdc', 長(zhǎng)度: 16
密文分組: 2, 密文數(shù)據(jù): b'\xdeON\x99\xfd\x87\xe3\xe8\xc6\x883\xff\x19\xae"\x05', 長(zhǎng)度: 16
密文Base64編碼:  b'f6RPKVG9dn7nUHg+bN+EFDk8rM8/reGRP/MtPmvYENzeT06Z/Yfj6MaIM/8ZriIF'
修改原始明文第23個(gè)字符 "3" 為任意字符,即明文分組1中的第7個(gè)數(shù)據(jù).
修改后的字符>A
新的明文無(wú)法decode, 因?yàn)榈?組密文已經(jīng)損壞, 但字符已經(jīng)翻轉(zhuǎn)成功:  b'\x97\xd0\x8e\xa9\xe3\xb6^\xb4\xda!\xc3\xdc\x8e\xd5-\x02jhijklAmnopqrstuvwxyz'
準(zhǔn)備修復(fù)IV解析完整明文
修復(fù)后的iv:  b'\xe6\xa3\xff\xde\x92\xc5/\xcb\xd3*\x91\x8a\xd8\x87\x7f\\'
修復(fù)IV后解析明文: b'0123456789abcdefjhijklAmnopqrstuvwxyz'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潘悼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗤栓,更是在濱河造成了極大的恐慌冻河,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茉帅,死亡現(xiàn)場(chǎng)離奇詭異叨叙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)堪澎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)擂错,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人全封,你說(shuō)我怎么就攤上這事马昙。” “怎么了刹悴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵行楞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我土匀,道長(zhǎng)子房,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮证杭,結(jié)果婚禮上田度,老公的妹妹穿的比我還像新娘。我一直安慰自己解愤,他們只是感情好镇饺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著送讲,像睡著了一般奸笤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哼鬓,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天监右,我揣著相機(jī)與錄音,去河邊找鬼异希。 笑死健盒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的称簿。 我是一名探鬼主播扣癣,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼憨降!你這毒婦竟也來(lái)了搏色?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤券册,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后垂涯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體烁焙,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年耕赘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骄蝇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡操骡,死狀恐怖九火,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情册招,我是刑警寧澤岔激,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站是掰,受9級(jí)特大地震影響虑鼎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一炫彩、第九天 我趴在偏房一處隱蔽的房頂上張望匾七。 院中可真熱鬧,春花似錦江兢、人聲如沸昨忆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邑贴。三九已至,卻和暖如春夺颤,著一層夾襖步出監(jiān)牢的瞬間痢缎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工世澜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留独旷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓寥裂,卻偏偏與公主長(zhǎng)得像嵌洼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子封恰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你麻养,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,724評(píng)論 2 59
  • 編寫(xiě)Xposed模塊 了解完Xposed框架的相關(guān)知識(shí)后诺舔,我們還要編寫(xiě)一些模塊代碼鳖昌,才能實(shí)現(xiàn)我們的監(jiān)測(cè)操作。首先在...
    amazingokc閱讀 72評(píng)論 0 0
  • 國(guó)慶期間到某地轉(zhuǎn)了一圈低飒,這趟硬生生的旅游經(jīng)歷许昨,讓我刻骨銘心的牢記住一點(diǎn):五一 、十一等放假期間堅(jiān)決不外出褥赊。因...
    行走的小螞蟻閱讀 23評(píng)論 0 0
  • 大寶糕档,媽媽愛(ài)你!0韬怼速那! 昨晚睡覺(jué)前,突然感覺(jué)腰疼的厲害尿背,夸張點(diǎn)說(shuō)有點(diǎn)動(dòng)彈不已端仰,于是我首先想到的一句話,孩子面前要學(xué)會(huì)...
    e93c8a26d93d閱讀 46評(píng)論 0 1
  • 一田藐、中原焦點(diǎn)團(tuán)隊(duì)杜冰冰焦點(diǎn)初15期堅(jiān)持分享第1615天 二榆俺、堅(jiān)持讀書(shū)分享第1545天,《洛克菲勒寫(xiě)給兒子的38封信...
    做一束暖暖的光閱讀 46評(píng)論 0 0