c++ - OpenSSL - 如何确定 rsa 加密字符串的正确长度?

标签 c++ encryption openssl rsa base64

我使用 OpenSSL 来加密一个字符串。之后我想使用 base64 算法也使用 OpenSSL 对加密的字符串进行编码。所以我发现以下代码被截断了:( bit.ly/adUSEw )

char *base64(const unsigned char *input, int length) {
BIO *bmem, *b64;
BUF_MEM *bptr;

b64 = BIO_new(BIO_f_base64());
bmem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bmem);
BIO_write(b64, input, length);
BIO_flush(b64);
BIO_get_mem_ptr(b64, &bptr);

char *buff = (char*)malloc(bptr->length);
memcpy(buff, bptr->data, bptr->length - 1);
buff[bptr->length - 1] = 0;

BIO_free_all(b64);

return buff;
}


int main(int argc, char **argv) {

char *message = "TEST";
char *encryptedString = Encrypt(message);

if (encryptedString == NULL) {
    return 0;
}
else {
    char *output = base64(encryptedString, strlen(encryptedString));
    cout << output << endl;
} }

我注意到 strlen(encryptedString) 在这种情况下无法正常工作。有时它会返回正确的长度,但大多数情况下不会。那么确定正确长度的正确方法是什么?

最佳答案

加密信息的大小正好是私钥中模数的大小。您必须从那里获取信息。

你不能使用 strlen 因为

  • 包含加密消息的缓冲区可能不是空终止的,并且
  • 加密的消息可能包含(并且很可能包含)空字节。

关于c++ - OpenSSL - 如何确定 rsa 加密字符串的正确长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122066/

相关文章:

Java Cipher 表示 key 长度无效

c++ - 为 Node.js 编译 native C++ 模块,链接到 openSSL/libcrypto 失败

c++ - 将 QT 32 位库与 64 位应用程序(MinGW64 编译器)链接起来?

c++ - 优化我的 read() 循环 C(两个循环合二为一)

c++ - 变量未设置为正确的值

linux - 无法与 Ubuntu Linux 机器建立 SSL 连接

php - openssl_pkey_get_private 返回 false

c++ - 如何使用 QlineEdit 输入整数值

Android - 使用私钥编码和解码 RSA?

php - 在 VB.NET 中加密并在 PHP 中解密