2017-04-21 2 views
1

私はかなり新しくC#ですが、Marvel APIにアクセスするコンソールアプリケーションを構築しています。APIコール用にMD5ハッシュを生成する必要があります。多くを研究した結果、System.Security.Cryptography名前空間またはWindows.Security.Cryptography.Core名前空間を使用してハッシュを生成できることがわかりました。私は現在、そのようSystem.Security.Cryptography名前空間を使用しようとしています:C#Windows.Security.Cryptography.Coreリファレンス

public string Hash(string data) 
    { 
     MD5 md5 = MD5.Create(); 
     byte[] toBeHashedBytes = Encoding.ASCII.GetBytes(data); 
     byte[] hash = md5.ComputeHash(toBeHashedBytes); 

     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < hash.Length; i++) 
     { 
      sb.Append(hash[i].ToString()); 
     } 

     return sb.ToString(); 
    } 

しかし驚異のAPIに渡されたときに、このメソッドから生成されたハッシュが有効ではありません。 Windows.Security.Cryptography.Core名前空間を使用しようとしていますが、必要な参照が見つからないようです。参照を追加するだけでいいですか、まずアセンブリをダウンロードする必要はありますか?私は、Windows 10およびVisual Studio 2017

答えて

3

基本的な問題は、16進数ではなく、10進数でバイトを結合することです。そうのような追加行固定:そのdocumentationに記載されているように、方法

sb.Append(hash[i].ToString("x2")); 

する

ffd275c5130566a2916217b101f26150

の入力 "1abcd1234" の正しい値を与えます。

+0

ありがとうございました!私はそれが非常に単純な何かであることを知っていた。私は間違いなくハッシュの仕組みについてもっと学ぶ必要があります。 –

+1

おそらく "x2"が必要なので、必要なときに先頭の0が書き込まれます。 (また、 "X2"ではなく "x2"が冗長ToLowerを排除します) – bartonjs

+0

@bartonjsはい、良いキャッチです。 –

0

Windows.Security.Cryptography.Coreを使用しています

は、コンソールアプリケーションのためではありません、UWPまたはWindows Appの名前空間です。コンソールアプリケーションでは使用できません。

関連する問題