私のアプリケーションには自動更新機能があります。ファイルを正常にダウンロードしたかどうかを確認するために、2つのハッシュを比較します.1つはxmlに、もう1つはダウンロード後に生成されたハッシュです。 2つのハッシュは同じですが、2つのハッシュが同じではないことを私に投げかけます。私がサイズをチェックすると、xmlハッシュストリングは66、もう一つは36です。私はトリムメソッドを使用しますが、まだ運はありません。文字列が等しくないイベント実際には等しい
string file = ((string[])e.Argument)[0];
string updateMD5 = "--"+((string[])e.Argument)[1].ToUpper()+"--";
string xx="--"+Hasher.HashFile(file, HashType.MD5).ToUpper()+"--";
// Hash the file and compare to the hash in the update xml
int xxx = (updateMD5.Trim()).Length;
int xxxxx = xx.Trim().Length;
if (String.Equals(updateMD5.Trim(), xx.Trim(), StringComparison.InvariantCultureIgnoreCase))
e.Result = DialogResult.OK;
else
e.Result = DialogResult.No;
調理人コード
internal static string HashFile(string filePath, HashType algo)
{
switch (algo)
{
case HashType.MD5:
return MakeHashString(MD5.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
case HashType.SHA1:
return MakeHashString(SHA1.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
case HashType.SHA512:
return MakeHashString(SHA512.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
default:
return "";
}
}
private static string MakeHashString(byte[] hash)
{
StringBuilder s = new StringBuilder();
foreach (byte b in hash)
s.Append(b.ToString("x2").ToLower());
return s.ToString();
}
StringBuilder s=new StringBuilder();
foreach (char c in updateMD5.Trim())
s.AppendLine(string.Format("{0}=={1}",c,(int)c));
テキストとして[mcve]を含めてください。 – Sayse
ここに表示されているものの間にはミスマッチがあります。左側の文字列は明らかに66文字ではありません。あなたが正しいものを見ていることを確認してください。 –
カスタムクラス "Hasher"?あなたの機能も提供してください。 – Prisoner