Je crée un hachage SHA256 avec clé en utilisant HMACSHA256 avec le code suivant :
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey);
byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data));
string hashResult = string.Empty;
for (int i = 0; i < hash.Length; i++)
{
hashResult += hash[i].ToString("x2"); // hex format
}
Cette méthode fonctionne parfaitement, mais elle échoue dans un environnement compatible avec la norme FIPS, car HMACSHA256 utilise une implémentation sous-jacente de SHA256Managed qui n'est elle-même pas conforme à la norme FIPS.
En cherchant dans la documentation MSDN, je trouve que la seule implémentation SHA256 de KeyedHashAlgorithm est HMACSHA256.
Je suis tenu de signer les demandes de services Web avec un hachage SHA256 codé (je ne peux donc pas modifier le type de hachage) et je dois pouvoir fonctionner dans un environnement compatible FIPS.
Une recherche sur Google montre que SHA256CryptoServiceProvider et SHA256Cng sont des moyens conformes aux normes FIPS pour créer des hachages SHA256, mais qu'aucun ne semble prendre en charge la création de hachages avec clé.