0

私は辞書を持っています。これを XML に変換し、SHA1 でハッシュします。

string xmlMessageCode = inputDictionary.ToXML(); //Extension method.

UnicodeEncoding UE = new UnicodeEncoding();
SHA1Managed hasher = SHA1Managed();
byte[] hashString = Encoding.UTF8.GetBytes(xmlMessageCode.ToCharArray());
byte[] hashCode = hasher.ComputeHash(hashString);

string computedHashString = UTF8Encoding.UTF8.GetString(hashCode);

return computedHashString;

その後、値をオブジェクト プロパティに入れ、これらのオブジェクトのコレクションを XML にシリアル化します。

XmlSerializer ser = new XmlSerializer(typeof(T));
XmlWriterSettings settings = new XmlWriterSettings()
{
Indent = false,
OmitXmlDecleration = false,
Encoding = Encoding.UTF8
};

using(StringWriter sr = new StringWriter)
{
using(XmlWriter xmlr = XmlWriter.Create(sr, settings))
{
ser.Serialize(sr, newList);
}
return sr.ToString();
}

これにより XML が生成されますが、結果の XML を検証しようとすると、ハッシュされた文字列から作成されたプロパティ内でエラーが発生します。

これを解決する最善の方法は何ですか?無効な文字を削除する必要がありますか、それともより洗練されたソリューションがありますか?

4

1 に答える 1

2

XML はテキスト ベースの表現です。バイナリ情報を直接埋め込むことはできません。

したがって、バイナリ データをテキストに変換する必要があります。通常、そのために Base64 エンコーディングが使用されます。

したがって、代わりに

string computedHashString = UTF8Encoding.UTF8.GetString(hashCode);

あなたが使用する必要があります

string computedHashString = System.Convert.ToBase64String(hashCode);
于 2012-07-10T07:58:14.397 に答える