c++ - Windows 上的 PEM_read_bio_RSAPrivateKey() 差异

标签 c++ openssl cross-platform rsa pem

我正在编写一些代码来对 RSA 签名数据进行处理。我已经让这段代码在 Ubuntu 上成功运行(OpenSSL 版本是 1.0.1f-1ubuntu2.7)。该代码获取消息,并使用私钥生成签名结果,我可以使用单独的程序和匹配的公钥来验证是否正确。

在Windows下,完全相同的代码产生不同的结果,签名的数据不同(并且不验证。我不明白为什么。我使用来自http://slproweb.com/products/Win32OpenSSL.html的OpenSSL发行版'Win64OpenSSL-1_0_1j'。

代码如下:

const char * rsa_pri_key = "-----BEGIN RSA PRIVATE KEY-----\n"
        "MII...L1t\n"
        "yC0...+zk\n"
        "c0...5Q\n"
        "-----END RSA PRIVATE KEY-----\n";

BIO* bio = BIO_new_mem_buf( (void*)rsa_pri_key, -1 );
BIO_set_flags( bio, BIO_FLAGS_BASE64_NO_NL );

RSA* private_key = PEM_read_bio_RSAPrivateKey(bio, NULL, NULL, NULL ) ;
if( !private_key )
{
    std::cout << "Key load failed" << std::endl;
}
BIO_free( bio ) ;


// Sign the data
signature = (unsigned char*) malloc(RSA_size(private_key));

RSA_sign(NID_md5, (unsigned char*) message, strlen(message), signature, &slen, private_key)

最佳答案

我认为这个问题可能与 Linux 和 Windows 上的 char 类型不同(无论是否有符号)有关。您正在转换为 (unsigned char *),这可能是出现问题的地方。

关于c++ - Windows 上的 PEM_read_bio_RSAPrivateKey() 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830950/

相关文章:

c++ - 最大可表示负 float

python - 相当于XDialog的跨平台

c++ - 使用 C++ 进行机器人实时编程

c++ - Qt应用程序启动崩溃

c++ - 为什么在定义之前调用这些函数?

c++ - X509_get0_notBefore 和 X509_get0_noAfter 在此范围内?

html - 垂直对齐一些字体

c++ - 使用 Regex 在 C++ 中查找并打印括号之间的数字

laravel - file_get_contents() : SSL operation failed with code 1. OpenSSL 错误信息

apache - 来自 Apache/OpenSSL 的 SSL 间歇性 Firefox 和 Python 问题