我有一個base64字符串的加密字符串,並使用BIO_f_base64()解碼並使用ofstream(C++代碼)寫入文件(decoded.txt)。無法使用私鑰解密base64解碼的字符串
用於解密我用下面的命令(終端)
openssl rsautl -decrypt -inkey private.key -in decoded.txt -out plaintext.txt
這會引發錯誤「比模更大RSA_EAY_PRIVATE_DECRYPT數據」。
但是當我使用
echo "base64 string" | base64 --decode >> terminal_decode.txt
通過終端解碼的base64它串並運行
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'中。 – jww
@noloader:我認爲這個問題意味着暗示字符串「base64 string」實際上應該被最初用於生成'decoded.txt'的base64字符串替換。 –