Security.Cryptography.HMACSHA256.Create()
和Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA256")
有什么区别?.NET的HMAC和HMAC KeyedHashAlgorithm有什么区别?
回答
首先,将约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
。
谢谢!那么,为什么类“HMACSHA256”和“HMACSHA1”都返回“SHA1”散列? – chaaru
@chaaru由于'CryptoConfig.CreateFromName'不知道任何关于'SHA256'的内容,它接收到'System.Security.Cryptography.HMAC'作为输入,因此它为'HMAC'算法创建了默认值'SHA1'。 –
呵呵,在Java中你会得到一个(可配置的)警告或错误,如果你可以调用'Create'而不指定声明类。 VisualStudio IDE和.NET命令行编译器中的情况不是这样吗?这听起来像是对我失败的秘诀。 –
没有。 Security.Cryptography.KeyedHashAlgorithm.Create("HmacSHA256")
(reference source)使用反射来查找Security.Cryptography.HMACSHA256
。
如果'HMACSHA256'类没有“覆盖”静态的'Create'方法,这可能就是这种情况。 –
- 1. HMAC签名和哈希直接有什么区别?
- 2. Message Digest,Message Authentication Code和HMAC有什么区别?
- 3. Python hmac和C#hmac
- 4. 红宝石HMAC-SHA与Python的区别
- 5. OpenSSL的HMAC蟒蛇HMAC
- 6. Java Mac HMAC vs C++ OpenSSL hmac
- 7. SuiteScript hmac sha256
- 8. 不对称HMAC
- 9. C#HMAC到Java
- 10. C#.net和Visual Basic.net有什么区别?
- 11. C#和.NET有什么区别?
- 12. .NET和ASP.NET有什么区别吗
- 13. .NET double和python float有什么区别?
- 14. SimpleDB HMAC签署
- 15. quercus和PHP hmac 256实现
- 16. 消化/ HMAC是
- 17. HMAC-SHA1在bash
- 18. PBKDF2-HMAC-SHA1
- 19. 蛮力HMAC
- 20. hmac-sha256支持
- 21. Azure API管理和HMAC
- 22. 与HMAC SHA1
- 23. loadrunner HMAC-SHA256
- 24. 红宝石中OpenSSL :: HMAC#hexdigest与Digest :: MD5#hexdigest之间的区别?
- 25. hmac sha-256 in perl
- 26. 为什么HMAC sha256在PHP和Javascript上返回不同的值
- 27. 实施修改后的HMAC
- 28. 为什么我没有找到匹配的mac找到:客户端hmac-md5,hmac-sha1
- 29. 经典ASP中的HMAC SHA1
- 30. Scala HMAC-SHA1签名?
嘿,好的。可能是C#的谜语书或混淆的C#竞赛的一部分:) –