DSA加密算法(产生公钥和私钥)以及检验签名

本文介绍如何使用DSA算法进行消息签名,并提供代码实现。通过DSA生成公钥和私钥,然后利用(r, s)对消息进行签名验证。此外,文章提及DSA的难点在于生成p和q,但并未深入讨论原理,主要关注实际操作。文章强调,这不是一次大作业的内容,而是为攻击该算法做准备。" 123948477,8304698,深入理解Java中的synchronized,"['Java', 'JVM', '并发编程', '锁机制']
摘要由CSDN通过智能技术生成

题目描述:给定消息,对其利用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 = 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值