【发布时间】:2014-06-25 07:25:48
【问题描述】:
我使用以下代码在 C++ 中使用 OpenSSL 加密字符串,并且仅当文本达到 256 字节时它才能正常工作,它不适用于更大的大小:
void encrypt(char* message, int sourceSzie, char* encryptedMessage, int &destSize)
{
char err[130];
RSA *rsa_pubkey = NULL;
FILE *rsa_pub_file = fopen("pubkey_file.bin", "rb");
if(PEM_read_RSAPublicKey(rsa_pub_file, &rsa_pubkey, NULL, NULL) == NULL)
{
printf("Error reading public key \n");
}
if((destSize = RSA_public_encrypt(sourceSzie, (unsigned char*)message, (unsigned char*)encryptedMessage, rsa_pubkey, RSA_PKCS1_OAEP_PADDING)) == -1)
{
ERR_load_crypto_strings();
ERR_error_string(ERR_get_error(), err);
fprintf(stderr, "Error encrypting message: %s\n", err);
}
fclose(rsa_pub_file);
}
char msg[1024];
stcpy(msg, "A test message");
int size;
char encrypted[1024];
encrypt(msg, strlen(msg), encrypted, size);
但是如果字符串的大小超过 256,它就不起作用并生成Data too large error。
我应该怎么做才能使它适用于任何大小的字符串?
【问题讨论】:
-
你可以读取256字节并加密,然后继续
-
你的意思是我每 256 个字节调用一次这个函数并连接加密内容?
-
是的,你可以试试。 :-)
-
建议的链接没有提供解决方案。它建议使用另一个库 Nacl 而不是 OpenSSL。我必须用 OpenSSL 来做。
-
虽然用 OpenSSL 构建一个安全的加密协议是肯定的可能,但是在没有大量加密背景的情况下构建一个是极不太可能的。 OpenSSL 只是一个糟糕的工具。
标签: encryption openssl rsa