p=473398607161,q=4511491,e=17,对数字999签名

import gmpy2  
  
# 给定的p, q, e值  
p = 473398607161  
q = 4511491  
e = 17  
n = p * q  # 计算模数n  
  
# 使用扩展欧几里得算法计算d,这里我们假设e和(p-1)*(q-1)互质  
phi_n = (p - 1) * (q - 1)  
d = gmpy2.invert(e, phi_n)  
  
# 要签名的数字(这里我们直接使用999)  
message = 999  
  
# 使用私钥d对消息进行签名  
# 在实际中,你会对消息的哈希值进行签名,但这里我们直接对消息签名  
signature = pow(message, d, n)  
  
print("Signature:", signature)

下面是不使用 gmpy2库

# 给定的p, q, e值  

p = 473398607161  

q = 4511491  

e = 17  

  

# 计算模数n  

n = p * q  

  

# 计算欧拉函数φ(n)  

phi_n = (p - 1) * (q - 1)  

  

# 使用扩展欧几里得算法的一个简化版本来找到d,这里只适用于较小的e和phi_n  

def extended_gcd(a, b):  

    if a == 0:  

        return (b, 0, 1)  

    else:  

        g, y, x = extended_gcd(b % a, a)  

        return (g, x - (b // a) * y, y)  

  

def modinv(a, m):  

    g, x, y = extended_gcd(a, m)  

    if g != 1:  

        raise Exception('modular inverse does not exist')  

    else:  

        return x % m  

  

# 计算私钥d  

d = modinv(e, phi_n)  

  

# 要签名的数字(这里我们直接使用999)  

message = 999  

  

# 使用私钥d对消息进行签名(注意:这在实际应用中是不安全的)  

# 注意:这里我们直接使用Python的pow函数进行模幂运算  

signature = pow(message, d, n)  

  

# 输出签名结果  

print("Signature:", signature)

结果:flag{535998728738810237}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值