7

質問はそれをすべて言います。このコード

string hash = "";
using (var md5 = System.Security.Cryptography.MD5.Create())  
{  
    hash = Convert.ToBase64String(md5.ComputeHash(streamReader.BaseStream));  
}  

常に同じハッシュを返します。

BaseStream からすべてのデータを MemoryStream に渡すと、毎回一意のハッシュが得られます。ランニングも同じ

string hash = "";  
using (var md5 = System.Security.Cryptography.MD5.Create())  
{  
    hash = Convert.ToBase64String(md5.ComputeHash(
              Encoding.ASCII.GetBytes(streamReader.ReadToEnd())));  
}  

2 番目の方が実際には高速ですが、これは悪い習慣だと聞いています。

私の質問は、ComputeHash(stream) を使用する適切な方法は何ですか。私にとっては、ストリーム内のデータに関係なく、常に(つまり、プログラムを再起動しても、参照をハッシュするだけではないという意味です)、同じハッシュを返します。

4

2 に答える 2

4

ComputeHash の前にstream.Position = 0を設定することで、この問題を解決しました。

于 2015-04-04T00:37:50.280 に答える