[羊城杯 2020]GMC

题目

from Crypto.Util.number import getPrime,bytes_to_long,getRandomNBitInteger
from secret import flag
from gmpy2 import gcddef gmc(a, p):if pow(a, (p-1)//2, p) == 1:return 1else:return -1def gen_key():[gp,gq] = [getPrime(512) for i in range(2)]gN = gp * gqreturn gN, gq, gpdef gen_x(gq,gp):while True:x = getRandomNBitInteger(512)if gmc(x,gp) ^ gmc(x,gq) == -2:return xdef gen_y(gN):gy_list = []while len(gy_list) != F_LEN:ty = getRandomNBitInteger(768)if gcd(ty,gN) == 1:gy_list.append(ty)return gy_listif __name__ == '__main__':flag = bin(bytes_to_long(flag))[2:]F_LEN = len(flag)N, q, p = gen_key()x = gen_x(q, p)y_list = gen_y(N)ciphertext = []for i in range(F_LEN):tc = pow(y_list[i],2) * pow(x,int(flag[i])) % Nciphertext.append(tc)with open('./output.txt','w') as f:f.write(str(N) + '\n')for i in range(F_LEN):f.write(str(ciphertext[i]) + '\n')

解题

程序如何加密的还是挺容易看出来的,关键就是怎么逆过去了。。。

from Crypto.Util.number import *
def isqr(x,p):if p==1 or x==1:return 1sgn=1while x%2==0:x=x//2if p%8==3 or p%8==5:sgn=-sgnif x<p:_tmp=pp=xx=_tmpif x%4==3 and p%4==3 :sgn=-sgnreturn sgn*isqr(x%p,p)
n,s=0,[]
fp=open("output.txt","r")
n=int(fp.readline())
while True:try:a=int(fp.readline())s.append(a)except:break
assert len(s)+1==304
ans=""
for i in s:if(isqr(i,n)==1):ans+='0'else:ans+='1'
print(long_to_bytes(int(ans,2)))

参考代码

运行得到:b'GWHT{876db950c1424a8e49d50cdcc0b3a86e}'

答案

flag{876db950c1424a8e49d50cdcc0b3a86e}

[羊城杯 2020]GMC相关推荐

  1. [羊城杯 2020]Power

    [羊城杯 2020]Power 题目 from Crypto.Util.number import * import gmpy2 from secret import flagp = getPrime ...

  2. [羊城杯 2020]RRRRRRRSA

    [羊城杯 2020]RRRRRRRSA 题目 import hashlib import sympy from Crypto.Util.number import *flag = 'GWHT{**** ...

  3. [羊城杯 2020]Bytecode [UTCTF2020]babymips

    文章目录 [羊城杯 2020]Bytecode 查看题目 python代码 注意点: BINARY_SUBTRACT 这个是减法 BINARY_SUBSCR 这个是索引 Z3约束脚本 注意点: 注意最 ...

  4. [羊城杯 2020]login [SUCTF2019]hardcpp

    文章目录 [羊城杯 2020]login 思路:一个py编译的exe,需要解包,然后反编译成py文件 1.解包:python pyinstxtractor.py login.exe 提示:pyinst ...

  5. [羊城杯 2020]逃离东南亚

    [羊城杯 2020]逃离东南亚 考点 复现过程 参考链接 考点 1.图片高度隐写 2.silenteye 3.空格与tab隐写 4.需要编程找到隐写内容并进行解码 复现过程 解压压缩包有三个压缩包文件 ...

  6. [羊城杯2020]easyphp --- 伪协议的使用时机,---python上传.htaccess的利用 -- preg_match绕过

    目录: 一. 自己做: 二.学到的.不足: 三. 1. 利用.htaccess来设置文件自动包含 2. 绕过 \n 的过滤 3. 绕过stristr的过滤. 4. 绕过preg_match 2.思路二 ...

  7. buuctf————[羊城杯 2020]login

    1.查壳. 无壳,64位.(当时还不知到PyInstaller ) 2.直接丢到IDA反编译.发现啥也没有. (连个提示性的字符串也没有,但运行是有input something.很迷.) 看了看大佬 ...

  8. [羊城杯 2020]easyre

    用PE查壳 用ida打开找到main函数 int __cdecl main(int argc, const char **argv, const char **envp) {int v3; // ea ...

  9. [羊城杯 2020] Web

    easycon 打开就是 扫出来个index.php 然后访问 提示eval post cmd,看来是post了个cmd可以执行命令 找到bbbbbbbbb.txt文件,用base64解码得到包含fl ...

最新文章

  1. 从CIO视角出发审视云环境下的安全议题
  2. 洛谷 P2818 天使的起誓
  3. Js中 call() 与 apply() exports
  4. 牛客 - Dress as women(sg定理+位运算)
  5. android 多界面光标,android.database.CursorWindowAllocationException:光标窗口分配2048 kb失败,即使关闭游标...
  6. 【java设计模式之Command(菜单命令) 】
  7. 前端学习(1352)模板语法
  8. Linux日志文件utmp、wtmp、lastlog、messages
  9. java拆分list_Java平均拆分list
  10. C++ 函数参数中和区别
  11. VFP DownFileX下载异常问题
  12. 微信开发平台对接流程(Java版本)1
  13. win10 修改gitlab账号_win10--git安装以及gitlab配置
  14. 二元函数偏导数的几何意义
  15. Unity3D手机斗地主游戏开发实战(01)_发牌功能实现
  16. C# 串口接收含有asic2=0x3f时发生的故障
  17. 传输层协议------TCP协议
  18. Python加密word文档
  19. 小米5无线显示如何连接到服务器,小米电视无线显示怎么用?详细操作方法
  20. 三极管相关知识点释疑(二)

热门文章

  1. 企业数据中心夏季冷却散热的十二大技巧
  2. 运维不得不知道的事 数据中心断电如何做
  3. 程序员微信头像_这才是程序员的内心独白
  4. Sklearn:sklearn.preprocessing之StandardScaler 的transform()函数和fit_transform()函数清晰讲解及其案例应用
  5. CV之PoseEstimation:Pose Estimation人体姿态估计(AI识人,OpenPose+DeepCut+RMPE+Mask RCNN)的简介、案例应用之详细攻略
  6. Py之keras-resnet:keras-resnet的简介、安装、使用方法之详细攻略
  7. TF之AE:AE实现TF自带数据集AE的encoder之后decoder之前的非监督学习分类
  8. 八数码(康拓展开标记)及类似题
  9. VUE:class与style强制绑定
  10. python 中给文件加锁——fcntl模块