西湖论剑2021 Crypto unknown_dsa wp

题目

from Crypto.Util.number import *
from Crypto.PublicKey import DSA
from Crypto.Hash import SHA
from gmpy2 import invert,powmod
import random
from secret import flag,m1,m2,ul,vl,wl

def encrypt():
    key = DSA.generate(int(1024))
    q = key.q
    p = key.p
    g = key.g
    x1 = bytes_to_long(flag[:len(flag)//2])
    x2 = bytes_to_long(flag[len(flag)//2:])
    assert x1<q and x2<q
    t = powmod(g, p*q-(p+q), p*q)
    hm1 = bytes_to_long(SHA.new(m1).digest())
    hm2 = bytes_to_long(SHA.new(m2).digest())
    k = random.randint(1, q-1)
    r1 = powmod(g, k, p) % q
    s1 = (hm1 + x1*r1) * invert(k, q) % q
    s2 = (hm2 + x1*r1) * invert(k, q) % q
    r2 = powmod(g, x1, p) % q
    s3 = (hm1 + x2*r2) * invert(k, q) % q
    print(p*q, (p-1)//q, t, sep=', ')
    print(r1, s1, s2, sep=', ')
    print(r2, s3, sep=', ')

def main():
    for i in range(len(ul)):
        assert ul[i]**2 - wl[i]* vl[i]**2==1
    e = 7
    cl1 <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值