#.net #.net-core #hash
#.net #.net-core #хэш
Вопрос:
Я не могу найти какую-либо реализацию RIPEMD160 в .net core 3.1.
Документация MS для RIPEMD160 не существует для net Standard, Core 3.1, Core 5.0 .
В системе.Безопасность.Криптография Я не могу найти ничего, связанного с этим.
Прежде чем искать сторонние пакеты (возможно, Chilkat) Я хотел бы попробовать использовать библиотеку framework.
Комментарии:
1. Кажется, они не импортировали его (даже тот
RIPEMD160Managed
, который был полностью управляемым, поэтому не зависит от ОС)2. Я уже импортирую BouncyCastle в проект. Я отправляю Org.BouncyCastle. Криптография. Дайджесты. RipeMD160Digest so попытается использовать это.
3. Вы могли бы импортировать версию mono, которая была у mono перед объединением referencesource из Microsoft … github.com/mono/mono/blob/mono-4.0.0-branch/mcs/class/corlib / … (таким образом, вы бы обошли проблемы с лицензированием … mono в то время была лицензирована как MIT… неясно, что произошло с исходным кодом, который они импортировали из referencessource)
4. Мммм, даже ссылочный источник лицензирован MIT… итак, вы можете взять «оригинальную» версию Microsoft: github.com/microsoft/referencesource/blob/master/mscorlib /… (см. Примечания по лицензированию github.com/microsoft/referencesource )
5. Я откатил ваш вопрос к более ранней версии. Если вы хотите предоставить решение вашего вопроса, пожалуйста, отправьте на него отдельный ответ. Вы можете это сделать.
Ответ №1:
Microsoft решила удалить «управляемые» (полностью реализованные в .NET) реализации алгоритмов хеширования и шифрования в .NET Core (не спрашивайте меня почему). Смотрите, например https://github.com/dotnet/runtime/issues/2094 (это как раз о RIPEMD160):
RIPEMD160 не является алгоритмом, предоставляемым криптоуровнями ОС, и .NET Core больше не поддерживает управляемые реализации криптографических алгоритмов.
И из msdn:
Все классы аутентификации сообщений на основе хэша и хэша (HMAC), включая управляемые классы *, зависят от библиотек ОС. Хотя различные библиотеки ОС отличаются по производительности, они должны быть совместимы.
Я не могу найти, обсуждалось ли это, или какой-то менеджер решил, что лучше всего поступить таким образом или что.
Простое решение — захватить код, используемый в .NET 4.7 / .NET 4.8, и использовать его напрямую:
Код получен как MIT, поэтому проблем с лицензированием нет, см. Домашнюю страницу:
Файлы в этом репозитории лицензированы по лицензии MIT, если иное не указано в заголовке файла. Если заголовок файла содержит только заголовок авторского права (например, «Copyright (c) Microsoft Corporation. Все права защищены.», вы можете предположить, что связанный файл имеет лицензию MIT.
Ответ №2:
Я начал копировать некоторые классы из System.Безопасность.Криптография, но поскольку существует много атрибутов и зависимостей от других классов / интерфейсов, мне не нравится это решение.
Потому что Chilkat кажется немного старым (netstandard 1.3), и в проекте я уже использовал BouncyCastle, поэтому в конце я просто написал это:
type RIPEMD160 () =
static member ComputeHash (bytes: byte array) =
let hasher = Org.BouncyCastle.Crypto.Digests.RipeMD160Digest()
hasher.BlockUpdate(bytes, 0, bytes.Length)
let hash:byte array = Array.zeroCreate (hasher.GetDigestSize())
hasher.DoFinal(hash, 0) |> ignore
hash