4

PHPやPythonのような言語では、入力文字列をHEXされた表現である出力文字列に変換する便利な関数があります。

これは非常に一般的で便利なタスク(パスワードの保存とチェック、ファイルコンテンツのチェックサムなど)ですが、.NETでは、私が知る限り、バイトストリームでしか作業できません。

作業を行うための関数は簡単に実行できますが(例: http: //blog.stevex.net/index.php/c-code-snippet-creating-an-md5-hash-string/)、何かが足りないのか、間違ったパターンを使用しているのか、それとも.NETにはそのようなものがないのかを知るためです。

ありがとう

4

3 に答える 3

7

リンクした方法は正しいようです。少し異なる方法がMSDNC#FAQに示されています。

コメントはあなたが使うことができることを示唆しています:

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string, "MD5");
于 2009-07-09T07:13:10.797 に答える
5

はい、あなたはバイトでしか作業できません(私が知る限り)。ただし、これらのバイトをループして次のような操作を行うことで、これらのバイトを簡単に16進表現に変換できます。

myByte.ToString("x2");

そして、次を使用して文字列を構成するバイトを取得できます。

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

したがって、それは数行で行うことができます。

于 2009-07-09T07:09:48.383 に答える
5

1つの問題は、「[文字列]のHEX表現」という概念そのものにあります。

文字列は文字のシーケンスです。これらの文字が個々のビットとしてどのように表されるかは、エンコーディングによって異なります。.NETへの「ネイティブ」エンコーディングはUTF-16ですが、通常、UTF-8を使用して(任意の文字列をエンコードする機能を維持しながら)よりコンパクトな表現が実現されます。

Encoding.GetBytes適切なエンコードを選択すると、文字列のエンコードされたバージョンを取得するために使用できますが、その選択があるという事実は、文字列からbase64/hexまたは文字列に対して直接暗号化/ハッシュを実行します。存在するそのようなAPIは、ほぼ確実に「バイト配列にエンコードし、適切な2項演算を実行し、不透明なバイナリデータをhex/base64にデコードする」ことを実行します。

Func<byte[], byte[]>(それは、文字列に適用される任意の二項演算を表すことができる、エンコーディング、a、およびhex / base64などの出力形式をとることができるユーティリティクラスを書く価値がないかどうか疑問に思います。)

于 2009-07-09T07:19:57.007 に答える