.NET的HMAC和HMAC KeyedHashAlgorithm有什么区别?

时间:2015-09-04 20:42:21

标签: c# .net hash f# cryptography

Security.Cryptography.HMACSHA256.Create()Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA256")之间的区别是什么?

2 个答案:

答案 0 :(得分:5)

首先,关于Security.Cryptography.HMACSHA256.Create() -

Create方法是HMAC类的方法,从中派生HMACSHA256。简而言之:

public class HMACSHA256 : HMAC {
...
}

其中HMAC定义为:

public abstract class HMAC : KeyedHashAlgorithm {
    new static public HMAC Create () {
        return Create("System.Security.Cryptography.HMAC");
    }

    new static public HMAC Create (string algorithmName) {
        return (HMAC) CryptoConfig.CreateFromName(algorithmName);
    }
    ...
}

其次,关于Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA256")

public abstract class KeyedHashAlgorithm : HashAlgorithm { 
    new static public KeyedHashAlgorithm Create(String algName) {
        return (KeyedHashAlgorithm) CryptoConfig.CreateFromName(algName);    
    }
    ...
}

正如您所看到的,这两个调用都会导致调用CryptoConfig.CreateFromName方法,但会使用不同的参数值,即第一种情况下为System.Security.Cryptography.HMAC,第二种情况下为HmacSHA256。在内部,CryptoConfig.CreateFromName方法中有一些表和反射逻辑。

第一次调用的结果是SHA1哈希,第二次调用的结果是SHA256

答案 1 :(得分:0)

无。 Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA256")reference source)使用反射来查找Security.Cryptography.HMACSHA256