【发布时间】:2017-09-19 07:07:58
【问题描述】:
对不起,愚蠢的问题,我看过很多例子,但找不到答案。 尝试使用 rsa 加密和解密文件:
加密
ptext = (unsigned char *)malloc(key_size);
ctext = (unsigned char *)malloc(key_size);
while (1) {
inlen = _read(in, ptext, key_size);
if (inlen <= 0) break;
outlen = RSA_public_encrypt(inlen, ptext, ctext, pubKey,
RSA_PKCS1_PADDING);
if (outlen != RSA_size(pubKey)) exit(-1);
_write(out, ctext, outlen);
}
解密:
while (1) {
inlen = _read(in, ctext, key_size);
printf("Read %i bytes\n", inlen);
if (inlen <= 0) break;
outlen = RSA_private_decrypt(key_size-11, ctext, ptext, privKey, RSA_PKCS1_PADDING);
printf("RSA returns %i\n", outlen);
if (outlen < 0)
{
fprintf(stderr, "OpenSSL error: %s\n", ERR_error_string(ERR_get_error(), NULL));
exit(0);
}
_write(out, ptext, outlen);
}
程序输出:
Read 431 bytes
RSA returns -1
OpenSSL error: error:0407109F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error
key_size 或 key_size-11 -> 没有变化。 请帮忙绕过这个错误。
【问题讨论】:
-
您正在写入
RSA_size(pubKey)字节的数据,然后读回key_size字节。它是否正确?key_size是否等于RSA_size(pubKey)?是什么让你决定尝试从key_size中减去 11? -
我将读取值更改为 rsa_size(pubKey),但得到了同样的错误。
-
RSA_size(pubKey) = 512 and key_size=512
标签: c++ c cryptography rsa