5

所定のキーを使用する C# で特定の文字列をハッシュする方法を探していました。

インターネットを介して例を見つけようとする冒険で、マシンのデフォルトキーを使用しているように見える MD5CryptoServiceProvider の例をたくさん見ましたが、特定のキーを適用する例はありません。他の誰かのサーバーと同期するために、データをエンコードするための特定のキーが必要です。ハッシュ化された文字列と ID 番号を渡すと、それを使用してデータが分析され、同様のセットが返されます。とにかく、両方に一貫性のある特定のキーを介してmd5をハッシュする方法があります。

これは C# で行うことをお勧めしますが、ライブラリでそれができない場合は、php や asp などの Web 言語で行うことができますか?

編集:私が投げ込まれたシナリオを誤解し、少し座って、なぜキーを使用させるのかを考えた後、文字列の最後にキーを追加してハッシュしたいようです。こうすることで、サーバーは、渡されたデータと一緒に持っているキーを追加して、有効なアクセスコンピューターであることを確認できます。とにかく...みんなありがとう^_^

Edit2:以下の私のコメントが言うように、それは私が気づかなかった「塩漬け」という用語でした. ああ、方向性のない新しい何かに放り込まれる喜び。

4

6 に答える 6

18

MD5 は暗号化ではなく、ハッシュです。文字列を復号化することはできません。

対称暗号化アルゴリズムを探しています。暗号化と復号化に同じキーを使用します。暗号化機能を理解せずに使おうとするのは危険です。理解しているつもりでも、間違いを犯す可能性があります。

別の人のサーバーにデータを転送する場合は、gpgのようなものを使用して、電話で同意した対称鍵または公開鍵暗号を使用してファイルを暗号化する方がよい場合があります。この方法では、暗号コードを書く必要がなく、より安全です (完全に安全というわけではありませんが、より安全です)。


編集:私はまだあなたの要件を解読しようとしています.

MD5 はキーなしのハッシュ関数です。使用中のキーはまったくありません。サーバーが巨大な文字列またはファイルとそのハッシュを送信したとします。次に、文字列またはファイルを MD5 し、計算したハッシュと送信したハッシュを比較します。一致する場合 - データは転送中に破損していません。MD5には「秘密のソース」がないため、転送中に送信されたものが改ざんされていないという意味ではありません. 欲しいものは何でも md5 してあなたに送ることができます。

HMAC はキー付きハッシュ関数です。それには、あなたとあなたが通信しているグループだけが知っておくべき秘密の要素、つまり秘密鍵があります。彼らが長い文字列またはファイルと HMAC を送信した場合、HMAC を自分で計算し、自分の HMAC と相手の HMAC を比較して、それらが一致する場合、データは転送中に破損しておらず、データが改ざんされていません

于 2009-07-06T19:59:49.990 に答える
2

MD5はハッシュ関数であり、厳密に言えば、文字列の「暗号化」には使用されません。入力文字列のフィンガープリントの一種として使用される 128 ビットの「メッセージ ダイジェスト」(名前に MD が含まれている) を生成します。

于 2009-07-06T20:01:18.927 に答える
0

では、両方の入力文字列が同一である場合、次のテストが失敗するのはなぜでしょうか?

    [TestMethod]
    public void MD5HashTest()
    {
        var hash1 = (new MD5CryptoServiceProvider()).ComputeHash(new System.Text.ASCIIEncoding().GetBytes("now is the time for all good men."));
        var hash2 = (new MD5CryptoServiceProvider()).ComputeHash(new System.Text.ASCIIEncoding().GetBytes("now is the time for all good men."));

        Assert.AreEqual(hash1, hash2);
    }
于 2010-04-18T18:00:58.103 に答える
0

SymmetricAlgorithmたとえば、から継承されたクラスの 1 つを使用する必要があります。

  • AesCryptoServiceProvider
  • DESCryptoServiceProvider
  • RC2CryptoServiceProvider
  • TripleDESCryptoServiceProvider
于 2009-07-06T20:06:31.070 に答える
0

トムの右: MD5 は単なる一方向ハッシュであり、復号化することはできません。これらのリンクを試してください:

于 2009-07-06T20:02:27.427 に答える
0

C# から AES を使用して、探しているタイプの暗号化を行うことができます。やり方の記事はこちら。

于 2009-07-06T20:02:40.717 に答える