题目描述:给定消息,对其利用DSA进行签名,并且根据给定的返回值(r,s)与返回的消息判定签名是否有效
废话不多讲,直接说直接上代码
DSA
import hashlib
import random
import tools
# 获取一个大素数p,满足2**(L-1) < p < 2**L,且L是64的倍数,512 < L < 1024
class Key(object): # 创建一个素数对象,含有相关的方法
def __init__(self, count):
while True:
q = tools.get_prime(160)
t = 2 * random.randint(2**(64*n - 161)-1,2**(64*n -160))
p = q * t + 1
if tools.Isprime(p):
break
while True: # 获取h,g
h = random.randint(2, p - 1)
g = tools.quick_algorithm(h, t, p)
if g > 1:
break
x = random.randint(1, q - 1) # 私钥
self.p = p
self.q = q
self.t = t # (p - 1) // q
self.h = h
self.g = g
self.__private_key = x # 私有变量
self.open_key = tools.quick_algorithm(g, x, p)
def puts(self):
print('p的值为:{}'.format(self.p))
print('q的值为:{}'.format(self.q))
print('t的值为:{}'.format(self.t))
print('h的值为:{}'.format(hex(self.h)))
print('g的值为:{}'.format(hex(self.g)))
print('私钥x的值为:{}'.format(hex(self.__private_key)))
print('公钥y的值为:{}'.format(hex(self.open_key)))
def sign(self,msg): # 获取r,s 的值
list_rs =