我有一个服务器,运行在python下,使用m2crypto签名消息m2crypto摘要--我使用openssl生成的公共和私有RSA密钥。在服务器端,一切正常
Python代码:
privateKey = M2Crypto.RSA.load_key(sys.argv2)
signedDigest =privateKey.sign(摘要,'sha256')
我再次确认签名是好的:
pubKey = M2Crypto.RSA.load_pub_key("key.pub.pem")
如果pubKey.verify(文摘,signedDigest,'sha256') (等等)
我将签名的sha256摘要存储在一个文件中,并将其与原始消息一起发送给客户端。
在客户端,在c++ vc6下运行,我加载签名的sha256摘要(二进制)和已签名的消息。现在的目标是与签名的sha256一起验证消息。我将密码作为静态链接,并且我知道它工作得很好,因为我可以计算sha256,并与来自python的具有相同结果的sha256进行比较。以下是代码:
RSA::PublicKey pubKey;
pubKey.Load( FileSource(LicenseControl::pubKeyPath,true));
RSASS< PKCS1v15,SHA >::验证者验证器(PubKey);
//shaDigest是新计算的sha256,signatureByte是从服务器接收的消息的签名
结果= verifier.VerifyMessage( shaDigest,CryptoPP::512 256::DIGESTSIZE,signatureByte,512);
这将编译并运行,但始终返回false。为了确保签名是有效的,我直接使用openssl (而不是通过m2crypto python包装器)验证它:
openssl -sha256 -verify key.pub.pem -signature original_file
验证确定
这证实了签名的sha256摘要没有问题,并且可以使用它来成功地使用公钥验证消息。我知道DER和PEM格式( openssl使用PEM,密码for使用PEM)。所以我相信公钥是正确的。现在我的问题是如何使用密码库来验证签名?我已经看过医生了,但经过几天之后,在我看来还是像中国人一样。我试过像
RSASS< PSSR,SHA >::验证者验证器(PubKey);
用PSSR加密python代码,但没有运气.我现在只考虑用公钥解密签名的sha256摘要,并将其与从接收文件中计算出来的新sha256摘要进行比较。但即使这么简单,我在医生身上也找不到.知道如何正确使用验证器吗?
如何使用公钥解密?万一以前的问题不能解决
发布于 2011-06-30 19:39:52
在此我认为有两个问题:
首先,SHA在RSASS< PKCS1v15, SHA >中的意思是SHA-1,而不是SHA_256.你会想要SHA256来代替。
另外,VerifyMessage接收整个消息,而不仅仅是哈希--哈希是在内部为您计算的。所以现在,当您试图验证消息时,您实际上(就Crypto++而言)试图验证SHA-1(SHA-256(msg)),因此它自然会失败。而是传递整个实际消息,跳过额外的SHA-256计算。
https://stackoverflow.com/questions/4946716
复制相似问题