C++ OpenSSL EVP_DigestVerify 间歇性失败 rsa_pk1.c:103 RSA_R_BAD_PAD_BYTE_COUNT
C++ OpenSSL EVP_DigestVerify intermittently failing rsa_pk1.c:103 with RSA_R_BAD_PAD_BYTE_COUNT
我已经包含了 a full, basic code example 可以使用以下命令编译(安装了 boost)"g++ -std=c++11 -g test.cpp -lssl -lcrypto -lboost_system"
我的代码非常接近 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
如有指点,将不胜感激!
问题与您在 testSignVerify
中将 char*
转换为 string
的方式有关:
string hashString((char*)pHash.get());
应该是:
string hashString(pHash.get(), hashLength);
这是因为默认的字符串构造函数会在它遇到第一个 '[=15=]'
时停止,这对于普通字符串来说是可以的,但对于加密哈希来说,它只是可能的字符之一。
我已经包含了 a full, basic code example 可以使用以下命令编译(安装了 boost)"g++ -std=c++11 -g test.cpp -lssl -lcrypto -lboost_system"
我的代码非常接近 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
如有指点,将不胜感激!
问题与您在 testSignVerify
中将 char*
转换为 string
的方式有关:
string hashString((char*)pHash.get());
应该是:
string hashString(pHash.get(), hashLength);
这是因为默认的字符串构造函数会在它遇到第一个 '[=15=]'
时停止,这对于普通字符串来说是可以的,但对于加密哈希来说,它只是可能的字符之一。