Всякий раз, когда я пытаюсь использовать MD5 на компьютере с Windows XP с включенным FIPS, я получаю ошибку System.InvalidOperationException
.
Есть ли альтернативный алгоритм, который я должен использовать вместо MD5 на FIPS?
Всякий раз, когда я пытаюсь использовать MD5 на компьютере с Windows XP с включенным FIPS, я получаю ошибку System.InvalidOperationException
.
Есть ли альтернативный алгоритм, который я должен использовать вместо MD5 на FIPS?
MD5 не соответствует требованиям FIPS. Вы можете использовать вместо MD5 один из следующих алгоритмов хеширования:
SHA512CryptoServiceProvider
? Как я уже говорил, я не могу придумать убедительной причины не использовать SHA512. Это намного безопаснее, чем SHA1, который почти наверняка не рекомендуется профессионалами в области безопасности. Я предполагаю, что будущие реализации FIPS также запретят это.
- person Cody Gray; 05.02.2011
Когда вы обеспечиваете соответствие FIPS в параметрах политики безопасности Windows, вы утверждаете, что собираетесь использовать только сертифицированные FIPS алгоритмы шифрования и хеширования. MD5 не является одним из этих утвержденных алгоритмов хеширования, поэтому возникает исключение.
Обходной путь прост: выберите другой алгоритм хеширования. .NET Framework предоставляет множество других параметров в System.Security.Cryptography
пространстве имен а>. Выберите один из алгоритмов семейства SHA. Я не могу представить себе никакой причины, по которой вам пришлось бы использовать MD5, а не одну из альтернатив.
Вы можете использовать MD5Digest из Org.BouncyCastle.Crypto.Digests.
MD5Digest hash = new MD5Digest();
public byte[] Hash(byte[] input)
{
hash.BlockUpdate(input, 0, input.Length);
byte[] result = new byte[hash.GetDigestSize()];
hash.DoFinal(result, 0);
return result;
}
public string Hash(string input)
{
var data = System.Text.Encoding.Unicode.GetBytes(input);
hash.BlockUpdate(data, 0, data.Length);
byte[] result = new byte[hash.GetDigestSize()];
hash.DoFinal(result, 0);
return Hex.ToHexString(result).ToUpper();
}