[羊城杯 2020]GMC

[羊城杯 2020]GMC

题目
在这里插入图片描述

from Crypto.Util.number import getPrime,bytes_to_long,getRandomNBitInteger
from secret import flag
from gmpy2 import gcd


def gmc(a, p):
    if pow(a, (p-1)//2, p) == 1:
        return 1
    else:
        return -1


def gen_key():
    [gp,gq] = [getPrime(512) for i in range(2)]
    gN = gp * gq
    return gN, gq, gp


def gen_x(gq,gp):
    while True:
        x = getRandomNBitInteger(512)
        if gmc(x,gp) ^ gmc(x,gq) == -2:
            return x


def 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_list


if __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])) % N
        ciphertext.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 1
    sgn=1
    while x%2==0:
        x=x//2
        if p%8==3 or p%8==5:
            sgn=-sgn
    if x<p:
        _tmp=p
        p=x
        x=_tmp
        if x%4==3 and p%4==3 :
            sgn=-sgn
    return 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}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Shopify上注册GMC(Google Merchant Center)的步骤如下: 1. 首先,你需要确保已经有一个网站和Google Ads账户,因为这两个是注册GMC的前提条件之一。如果还没有,你需要先创建一个网站并注册Google Ads账户。 2. 接下来,你需要访问Google Merchant Center的网站(https://merchants.google.com/),然后点击"开始"按钮。 3. 在注册页面上,你需要提供你的商家信息。这包括商家名称、国家/地区和语言。 4. 在商家设置页面上,你需要填写商家的详细信息,包括地址、联系电话和网站URL。这些信息需要与你的营业执照和网站上的信息一致。 5. 在网站验证页面上,你需要验证你的网站。这可以通过在你的网站上添加Google提供的验证代码或者通过Google Analytics进行验证。 6. 在税务信息页面上,你需要提供你的税务信息,包括税务登记号码和税务注册国家/地区。 7. 最后,你需要阅读并同意Google Merchant Center的使用条款和隐私政策,然后点击"提交"按钮完成注册过程。 值得注意的是,在注册GMC之前,你需要确定没有重复注册过GMC,并且需要删除之前注册时在网站上添加的代码。这可以避免出现冲突和问题。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [如何避免谷歌GMC广告被封,被封后又如何解封呢?](https://blog.csdn.net/sjdhnsakjdh/article/details/116753390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值