2009-07-09 7 views
4

PHPやPythonのような言語では、入力文字列をHEXed表現の出力文字列に変換する便利な関数があります。C#:String - > MD5 - > Hex

私は非常に一般的で便利なタスク(パスワードの保存とチェック、ファイルの内容のチェックサム)がありますが、.NETではバイトストリームのみで作業できることがわかります。

作業を行う機能は簡単に置くことができますが(例えばhttp://blog.stevex.net/index.php/c-code-snippet-creating-an-md5-hash-string/)、間違ったパターンを使用しているか、.NETにそのようなものがないかどうかを知りたいと思います。

おかげ

+2

MD5の代わりにSHA-256を使用することを検討してください。 – inazaruk

答えて

7

、わずかに異なる方法がMSDN C# FAQ

に示したされたコメントは、あなたが使用することができます示唆:

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string, "MD5"); 
+1

しかし、Encoding.ASCIIを使用しているので、FAQに表示されているコードを使用しないでください。したがって、すべての非ASCII文字を "?"として扱います。 - それはかなりひどいハッシュになります。 –

5

はい、あなただけ(私の知る限り)バイトで動作することができます。しかし、あなたはそれらを介してループして同じような何かをすることによって彼らの16進数表現に簡単にそれらのバイトを変えることができます:

myByte.ToString("x2"); 

そして、あなたが使用して文字列作るバイトを取得することができます:だから、それは可能性

System.Text.Encoding.UTF8.GetBytes(myString); 

をいくつかの行で行われます。あなたがするリンク方法は右のようだ

5

一つの問題は、HEXed」の概念そのものであります[文字列]の表現。

文字列は、文字ののシーケンスです。これらの文字が個々のビットとしてどのように表されるかは、エンコーディングによって異なります。 .NETへの "ネイティブ"エンコーディングはUTF-16ですが、通常はUTF-8を使用してよりコンパクトな表現が実現されます(任意の文字列をエンコードする機能は維持されます)。しかしを作るために、その選択は直進していない多くのAPIがあることが理由であるがあること - あなたは適切なエンコーディングを選択したら

あなたは、文字列のエンコードされたバージョンを取得するためにEncoding.GetBytesを使用することができます文字列からbase64/hexへ、または文字列に直接暗号化/ハッシングを実行します。 であるようなAPIがあれば、「バイト配列にエンコードし、適切なバイナリ操作を行い、不透明なバイナリデータをhex/base64にデコードする」ということはほぼ間違いありません。

(これは、エンコーディングをとる可能性のあるユーティリティクラス、つまりFunc<byte[], byte[]>と16進/ base64などの出力形式を書く価値がないのかどうか疑問です。これは文字列に適用される任意のバイナリ演算を表す可能性があります。 )

関連する問題