2017-08-23 43 views
-1

我已经包含a full, basic code example可以使用下面的命令(已安装boost)编译“g ++ -std = C++ 11 -g test.cpp -lssl -lcrypto -lboost_system“C++ OpenSSL EVP_DigestVerify间歇性地失败rsa_pk1.c:103与RSA_R_BAD_PAD_BYTE_COUNT

我的代码非常接近OpenSSL EVP签名和验证Asymmetric example,并对内存管理进行了一些Boost重构。

但是,它的行为非常间歇,并且随着不同的按键以及不同的文本而改变。我很确定我在这里错过了一些东西,但由于时间压力,我正要对openssl实用程序进行安全的系统调用,而这与我没有任何问题有关。

下面的测试输出说明了这个问题。 “A”和“AAA”已成功签名和验证,而“AA”失败并带有RSA_R_BAD_PAD_BYTE_COUNT填充错误。为了尝试一个正确的,我将填充设置为PKCS,但它没有任何区别。

2048 bit [2] - Text: A - Success 
Authentication failure: 67567722, rsa_pk1.c, 103, , 0 257 
Error string: error:0407006A:lib(4):func(112):reason(106) 
2048 bit [2] - Text: AA - Failure 
2048 bit [2] - Text: AAA - Success 

任何指针在这里将不胜感激!

+0

请显示您的代码。由于Stack Overflow隐藏了你的密切原因:*寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现它的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)。* – jww

+0

您会在代码的第一行找到一个链接 – mgibson

回答

3

问题与你转换成char*里面stringtestSignVerify方式做:

string hashString((char*)pHash.get()); 

应该是:

string hashString(pHash.get(), hashLength); 

这是因为默认字符串构造函数会停在第一它遇到了,这对于普通字符串来说是可以的,但对于加密哈希,它只是可能的字符之一。