我正在尝试使用 RSA_public_encrypt() 使用公钥加密一些纯文本,然后该数据将被发送到远程服务器进行验证。我相信我的加密/解密工作正常,因为 RSA_public_encrypt 的输出可以传递给 RSA_private_decrypt 并且它可以工作。我现在遇到的问题是我需要对数据进行 Base64 编码才能通过 HTTP 发送。
\n\n作为测试(在将其发送到服务器之前),我将 RSA_public_encrypt() 的输出编码为 base64,然后对其进行解码并将其传递回 RSA_private_decrypt()。这似乎有时有效,但会失败并出现如下错误:
\n\nerror:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error\nRun Code Online (Sandbox Code Playgroud)\n\n当我使用 memcmp 将原始数据(base64 之前)与 Base64 解码函数的输出进行比较时,尽管内容看起来匹配(在 Visual Studio 中通过以十六进制形式查看内存内容),我还是收到了 -1。我还使用各种在线工具检查了 Base64 编码版本,它们似乎解码为预期值。
\n\n我已经仔细检查过 base64/unbase64 函数的输入/输出是否以 null 结尾,这似乎没有什么区别。
\n\n我已经在这个问题上绕了好几天了,但我相信这一定是与 Base64 编码/解码过程有关的问题,因为当不涉及这个问题时,一切都会正常。如果有人对如何发生这种情况有任何建议,我们将不胜感激。
\n\nOpenssl版本: 1.0.1c
\n\n平台: Windows/MSVC
\n\nBase64 代码:
\n\nchar *base64(const unsigned char *input, int length)\n{\n BIO *bmem, *b64;\n BUF_MEM *bptr;\n char *buff = NULL;\n\n b64 = BIO_new(BIO_f_base64());\n BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);\n bmem = BIO_new(BIO_s_mem());\n b64 …Run Code Online (Sandbox Code Playgroud)