2010-11-08 78 views
3

我使用OpenSSL来加密一个字符串。之后,我想用base64算法对使用OpenSSL的加密字符串进行编码。所以我发现剪断下面的代码:(bit.ly/adUSEw)OpenSSL - 如何确定rsa加密字符串的正确长度?

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)未在这种情况下正常工作。有时它会返回正确的长度,但大部分不会。那么确定正确长度的正确方法是什么?

回答

3

加密消息的大小恰好是私钥模数的大小。你必须从那里获得信息。

不能使用strlen因为

  • 与加密的消息缓冲区可能不是空终止,和
  • 加密的消息可以包含(和可能含有)空字节。
+0

Muchas gracias! – 2010-11-08 08:31:49