VCTF纳新赛[狂飙]--crypto

 hint:key key key

AES里面cbc模式的题,需要密文c,密钥key,偏移向量iv,已知iv,c,其中他的key经过一个模运算的加密,我们所要做的就是还原key的值

n=m%key

=>k*key=m-n

(k是一个整数,使上面的式子满足条件)

我们对m-n进行分解素数,使用了风二西的工具

这题能分解就一定可以还原key,

把分解后的数放在一个list里,找到他们所有的作乘法的可能,还原成字符串就是key的值

其中还原key有一个提示的flag{you_did_it}(可能不准确,大致的记忆),就知道做的是正解

找到其中24字节的key即可解出(文中exp并没有做出过滤就能出了,就没详细补充)

得到结果如下

原题:

import os
# from flag import flag
from Crypto.Util.number import *
from Crypto.Cipher import AES
m = 88007513702424243702066490849596817304827839547007641526433597788800212065249
key = os.urandom(24)
key = bytes_to_long(key)
n=m % key
flag += (16 - len(flag) % 16) * b'\x00'
iv = os.urandom(16)
aes = AES.new(key,AES.MODE_CBC,iv)
enc_flag = aes.encrypt(flag)

print(n)
print(enc_flag)
print(iv)


#103560843006078708944833658339172896192389513625588
#b'\xfc\x87\xcb\x8e\x9d\x1a\x17\x86\xd9~\x16)\xbfU\x98D\xfe\x8f\xde\x9c\xb0\xd1\x9e\xe7\xa7\xefiY\x95C\x14\x13C@j1\x9d\x08\xd9\xe7W>F2\x96cm\xeb'
#b'UN\x1d\xe2r<\x1db\x00\xdb\x9a\x84\x1e\x82\xf0\x86'

题解exp:

from itertools import combinations
from Crypto.Util.number import *
from Crypto.Cipher import AES

# 原始列表
list1 = [3, 37, 439, 3939851, 265898280367, 5036645362649, 342291058100503482469327892079792475478873]

# 存储所有乘积结果的列表
all_products = []

# 存储有效的密钥
key_list = []

# 遍历组合长度从2到列表长度的所有可能情况
for r in range(2, len(list1) + 1):
    # 生成当前长度的所有组合
    comb = combinations(list1, r)
    # 遍历组合并计算乘积
    for c in comb:
        product = 1
        for num in c:
            product *= num
        all_products.append(product)

# 输出所有乘积结果
print("列表中所有数字的所有可能乘积为:")
for product in all_products:
    print(product)
    key_list.append(long_to_bytes(product))

# 已知数据
enc_flag = b'\xfc\x87\xcb\x8e\x9d\x1a\x17\x86\xd9~\x16)\xbfU\x98D\xfe\x8f\xde\x9c\xb0\xd1\x9e\xe7\xa7\xefiY\x95C\x14\x13C@j1\x9d\x08\xd9\xe7W>F2\x96cm\xeb'
iv = b'UN\x1d\xe2r<\x1db\x00\xdb\x9a\x84\x1e\x82\xf0\x86'

for key in key_list:
    try:
        aes = AES.new(key, AES.MODE_CBC, iv)
        dec_flag = aes.decrypt(enc_flag)
        # 去除填充
        dec_flag = dec_flag.rstrip(b'\x00')
        print(dec_flag.decode())
    except ValueError:
        # AES解密失败,跳过当前密钥
        continue

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值