【发布时间】:2014-02-19 06:47:19
【问题描述】:
我有一个 base64 加密字符串,并使用 BIO_f_base64() 解码并使用 ofstream(c++ 代码)写入文件(decoded.txt)。
为了解密我使用了下面的命令(终端)
openssl rsautl -decrypt -inkey private.key -in decoded.txt -out plaintext.txt
这将引发错误“RSA_EAY_PRIVATE_DECRYPT 数据大于 mod”。
但是当我通过终端使用base64字符串解码它时
echo "base64 string" | base64 --decode >> terminal_decode.txt
然后运行
openssl rsautl -decrypt -inkey private.key -in terminal_decode.txt -out plaintext.txt
工作正常。我比较了 decode.txt 和 terminal_decode.txt,看起来都一样。
使用encoded.txt文件我无法解密字符串,请帮我解决这个问题
用于解码的代码:-
char *enstr = new char[200];
strcpy(enstr,"sX3/ks3+abL5B1O/o/gSywOYv0tACnRkrMxKnBVDT7yhnatfE5ox2mvQz8RyM6MSCtf2exLUz3uIQGnTnk0yqgWzaDgR2ASEXi6ap1pV+1gAPMHBdiMZeNDI86RfleIH/37p7+lW3eyYwnpKJrsHf72jUu9R+aEXZSsEDEDQ1Hw=");
int len = strlen(enstr);
char *buff = (char *)malloc(len+1);
memset(buff,0,len+1);
BIO *biomem, *bio64;
bio64 = BIO_new( BIO_f_base64() );
BIO_set_flags(bio64,BIO_FLAGS_BASE64_NO_NL);
biomem = BIO_new_mem_buf(enstr,len);
biomem = BIO_push(bio64,biomem);
BIO_read(biomem,buff,len);
buff[len]='\0';
ofstream ofs("encoded.txt",std::ios::out);
ofs.write(buff,len);
ofs.close();
【问题讨论】:
-
如果将
terminal_decode.txt与decoded.txt进行比较会发生什么?我强烈怀疑这根本与解密无关,而与您的 base64 解码代码有关。 -
"base64 string" not Base64 编码,因此没有理由尝试解码并将其保存在
terminal_decode.txt。 -
@noloader:我认为这个问题的意思是暗示字符串“base64 string”实际上应该替换为最初用于生成
decoded.txt的base64字符串。 -
base64 字符串仅编码。如果我使用 ofstream 写入文件可以吗?你想让我分享代码吗?
-
共享代码,请参考并帮助我解决问题