2017-08-18 3 views
0

HMAC(HMACSHA1 - HMACSHA512 ...)が組み込まれています。 しかし、カスタムHashAlgorithmクラスを使ってHMACを作成することは可能ですか?カスタムHashAlgorithmを使用したHMAC

私はHMAC.Create("location")を試みたが、new HMAC(HashAlgorithm)のようなコンストラクタがあるかもしれないが、単にNullReferenceException

を投げましたか?

これはHashAlgorithmのコード(Fnv1ハッシュ)です:.NET Frameworkの

public class Fnv1_32 : HashAlgorithm 
{ 
    private const uint prime = 0x01000193; 
    private const uint offsetbasis = 0x811C9DC5; 
    private uint _Hash; 

    public Fnv1_32() 
    { 
     this.Initialize(); 
     this.HashSizeValue = 32; 
    } 

    public override void Initialize() 
    { 
     this._Hash = offsetbasis; 
    } 

    protected override void HashCore(byte[] array, int ibStart, int cbSize) 
    { 
     for (var i = ibStart; i < cbSize; i++) 
     { 
      this._Hash *= prime; 
      this._Hash ^= array[i]; 
     } 
    } 

    protected override byte[] HashFinal() 
    { 
     return BitConverter.GetBytes(this._Hash); 
    } 
} 
+0

私はあなたに確かに1つ言うことができます:このハッシュ関数を持つHMACは安全ではありません。サイズの目立った問題を修正しても、実在する偽造を作成するのは簡単です... – TheGreatContini

答えて

0

は、.NETのコア上

public class HMACFnv1_32 : HMAC 
{ 
    private const string Fnv1CryptoConfigId = "Fnv1_32"; 

    static HMACFnv1_32() 
    { 
     CryptoConfig.AddAlgorithm(typeof(Fnv1_32), Fnv1CryptoConfigId); 
    } 

    public HMACFnv1_32(byte[] key) 
    { 
     HashName = Fnv1CryptoConfigId; 
     HashSizeValue = 32; 
     Key = key; 
    } 
} 

HMACの実装のようなものを経由して、これを達成することができますがされていますすべての組み込みHMACクラスがHMAC計算を実行するためにシステム暗号化ライブラリを呼び出します。したがって、.NETコアでカスタムダイジェストを使用するには、HMACを自分で作成する必要があります。

+0

'InitializeKey'メソッドを見つけることができません。なぜ誰が知っていますか? (私は.NET 4.6.1上にある) – eventseen

+0

編集: 'InitializeKey'メソッドは内部です。それで代替手段はありますか? – eventseen

+0

'Key'プロパティを設定すると、InitializeKeyが呼び出されます。コードを更新しました。 – bartonjs

関連する問題