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. Message Digest,Message Authentication Code和HMAC有什麼區別?
- 2. HMAC簽名和哈希直接有什麼區別?
- 3. Python hmac和C#hmac
- 4. HMAC和WCF服務.net
- 5. 紅寶石HMAC-SHA與Python的區別
- 6. OpenSSL的HMAC蟒蛇HMAC
- 7. 爲什麼沒有HMAC認證包?
- 8. Java Mac HMAC vs C++ OpenSSL hmac
- 9. .net 4.0和.net 4.0.3有什麼區別?
- 10. .Net HMAC和base64編碼問題
- 11. HMAC在消息VS HMAC在消化
- 12. .NET和ASP.NET有什麼區別嗎
- 13. C#和.NET有什麼區別?
- 14. .NET double和python float有什麼區別?
- 15. C#.net和Visual Basic.net有什麼區別?
- 16. Netduino和.NET Gadgeteer有什麼區別?
- 17. SuiteScript hmac sha256
- 18. 在OpenSSL中使用HMAC和EVP功能
- 19. C#HMAC到Java
- 20. 不對稱HMAC
- 21. HMAC SHA-256和Facebook signed_request
- 22. SimpleDB HMAC簽署
- 23. quercus和PHP hmac 256實現
- 24. 消化/ HMAC是
- 25. HMAC-SHA1在bash
- 26. PBKDF2-HMAC-SHA1
- 27. 蠻力HMAC
- 28. hmac-sha256支持
- 29. Django依賴:hmac?
- 30. Azure API管理和HMAC
嘿,好的。可能是C#的謎語書或混淆的C#競賽的一部分:) –