OpenSSLを使用してデジタル署名を追加するC++クラスを作成しています。std :: ofstreamは、unsigned charの配列が与えられたときに余分なバイトを出力します。リリースモードでのみです
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1((unsigned char *)temp.c_str(), temp.size(), hash);
std::ofstream fout("resources/hash.out", std::ios::binary);
fout << hash;
fout.close();
このコードは、デバッグモードでは正常に動作します。代わりにSHA_DIGEST_LENGTH = 20バイトのリリースモード、fout << hash
印刷物30には、最後の10はゴミのように見える(多分バッファオーバーフロー?)
私の現在の回避策ではなく、ストリーミングの各文字を印刷することである。
for (int i=0; i<SHA_DIGEST_LENGTH; ++i)
fout.put(hash[i]);
どちらのビルドモードでも動作しますが、ストリーム演算子が文字列の長さを誤読させる原因となるのは不思議です。誰も思考を持っていますか?
私はMSVC++ 12(x86_amd64)でコンパイルしています。
'SHA1'はバッファをヌル終了しますか? – aschepler
また、 'temp.size()'にはヌルターミネータが含まれていないことに注意してください。 – NathanOliver
これはCではないので、Cにタグを付けないでください。 –