weve_known_each_other_for_so_long

NSSCTF密码题

解题思路

1.题目包含两个文件:一个是sage文件,另一个是txt。sage文件内的代码内容如下

// sage code 
load('never_gonna.sage')
import numpy as np

n = len(flag)
p = next_prime(4396 // 7)
Zp = Zmod(p)

assert give_you_up.__class__.__name__ == 'Matrix_modn_dense_double'
assert give_you_up.nrows() == n
assert give_you_up.ncols() == n
assert give_you_up.base_ring() == Zp

assert isinstance(let_you_down, list)
for i in range(n):
    make_you_cry = Zp(flag[i])
    say_goodbye = let_you_down[i]
    assert say_goodbye.__class__.__name__ == 'Vector_modn_dense'
    assert say_goodbye.length() == n
    assert say_goodbye.base_ring() == Zp
    assert give_you_up * say_goodbye == make_you_cry * say_goodbye, (i, say_goodbye)

print(give_you_up)

galf = np.array(list(flag))
run_around = np.argsort(galf)
desert_you = np.argsort(run_around)

print(desert_you)

2.对比另一个txt文件的内容,我们可以简单推测一下代码的内容推测内容如下:其中give_you_up为文件中前35行的数组,最后一行输出的是desert_you,代码中的n为35,p为631,Zp对应Zmod函数

# load('never_gonna.sage')
import numpy as np
from sympy import *
give_you_up=[[190,567,69,241,81,519,489,211,204,53,71,38,547,319,398,373,216,31,587,572,343,159,111,200,503,286,162,374,426,579,606,448,590,49,605],
......
......
......
[119,494,280,481,296,336,320,98,523,335,501,407,530,416,36,526,300,162,121,391,363,70,409,257,569,380,565,294,466,357,29,455,471,132,495]]
desert_you=[18,22,21,13,23,14,33,15,6,29,7,8,20,25,9,16,10,26,12,19,11,0,17,31,28,30,32,1,24,5,2,27,3,4,34]

n = 35
# p = next_prime(4396 // 7)
p= nextprime(628)#631
# Zp = Zmod(p)

3.同时对照着数据类型:
say_goodbye.class.name == ‘Vector_modn_dense’,assert give_you_up.class.name == ‘Matrix_modn_dense_double’
以及 np.argsort函数可以尝试逆向运算得到flag数组的值(这一步未进行尝试)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值