Python 如何将公钥与pyOpenSSL一起用于验证签名消息?

Python 如何将公钥与pyOpenSSL一起用于验证签名消息?,python,cryptography,rsa,pyopenssl,dsa,Python,Cryptography,Rsa,Pyopenssl,Dsa,我尝试将pyOpenSSL用于已签名的数据,我创建了密钥对private和publique以及证书 我是这项技术的初学者,我使用OpenSSl,但如果您有关于在python中使用私钥和公钥生成签名消息的建议,我接受! 我想在测试中使用RSA和DSA算法 我找到了m2Crypto,pyCrypto和其他。我不知道什么是最好的。 python的gnupg和pyOpenSSl是最近才出现的 我使用该函数用我的私钥对消息进行签名,并验证数据。 但当我看到验证签名的函数时,在参数中我需要: 私钥、签名、数

我尝试将pyOpenSSL用于已签名的数据,我创建了密钥对private和publique以及证书

我是这项技术的初学者,我使用OpenSSl,但如果您有关于在python中使用私钥和公钥生成签名消息的建议,我接受! 我想在测试中使用RSA和DSA算法

我找到了m2Crypto,pyCrypto和其他。我不知道什么是最好的。 python的gnupg和pyOpenSSl是最近才出现的

我使用该函数用我的私钥对消息进行签名,并验证数据。 但当我看到验证签名的函数时,在参数中我需要: 私钥、签名、数据和摘要类型

我不知道我在这段代码中的错误在哪里,我找到了一些示例,但我不理解这是如何工作的,因为verify函数的第一个参数是X509对象证书,它是与生成签名的私钥相对应的X509实例。第二个是用私钥生成的签名

此代码与私钥完美配合:

from OpenSSL import crypto

_k = crypto.PKey()
_cert = crypto.X509()

# Create keys
_k.generate_key(crypto.TYPE_RSA, 2048)

# Add argument for create certificate
_cert.gmtime_adj_notBefore(0)
_cert.gmtime_adj_notAfter(0*365*24*60*60) #10 years expiry date
_cert.set_pubkey(_k)
_cert.sign(_k, 'sha256')

# Create key's file
with open("public_key.pem",'w') as f:
    f.write(crypto.dump_publickey(crypto.FILETYPE_PEM, _k))

with open("private_key.pem",'w') as f:
    f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, _k))

with open("certificate.pem",'w') as f:
    f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, _cert))

#-------------------------------------------------------------------------------

# Open key and load in var
with open("private_key.pem",'r') as f:
    priv_key = crypto.load_privatekey(crypto.FILETYPE_PEM, f.read())

with open("public_key.pem",'r') as f:
    pub_key = crypto.load_publickey(crypto.FILETYPE_PEM, f.read())

with open("certificate.pem",'r') as f:
    cert = crypto.load_certificate(crypto.FILETYPE_PEM, f.read())

# sign message 'hello world' with private key and certificate
sign = crypto.sign(priv_key, "hello world", 'sha256')
print crypto.verify(cert, sign, "hello world", 'sha256')
所以,我的问题是,如何使用公钥来验证数据? 如果Bob给alice一个公钥,它如何用这个公钥检查消息

你有主意吗

非常感谢, 罗曼

我从中找到了答案

我想知道。。当我收到消息时,我使用公钥来验证发送器,但是为什么我必须使用签名来进行验证呢?要生成签名,我需要私钥。。
在使用图书馆的过程中,是否有我不明白的地方?

好的,我理解我的错误:


你试过crypto.verifypub_key,sign,hello world,'sha256'吗?是的,我试过这个,publique key和私钥不是同一个实例,
from OpenSSL.crypto import load_publickey, FILETYPE_PEM, verify, X509
# ... code ...
x509 = X509()
x509.set_pubkey(pub_key)
# ... code ...
print verify(x509, sign, sha, 'sha256')