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

3

我使用 OpenSSL 对字符串进行加密。之后,我想要使用 OpenSSL 还将加密后的字符串编码为 base64 算法。所以我找到了以下代码片段:( 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)不能正常工作。有时它返回正确的长度,但大多数情况下不是。那么确定正确长度的正确方法是什么?
1个回答

3

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

您不能使用strlen,因为

  • 加密消息的缓冲区可能没有以空字符结尾,并且
  • 加密消息可能包含(并且很可能包含)空字节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接