Недавно я заметил, что алгоритм SHA вычисляет хеши со случайной длиной.SHA вычисляет хеши со случайной длиной
HashAlgorithm provider;
provider = HashAlgorithm.Create("System.Security.Cryptography.SHA256");
while(!stackoverflow) {
Console.WriteLine(Encoding.UTF8.GetString(
provider.ComputeHash(Encoding.UTF8.GetBytes(
(new Random()).Next().ToString())))
.Count().ToString());
}
Выходы:
29
29
30
29
29
30
29
31
29
29
32
29
30
28
...
Можно ли установить максимальную длину хэш? (Может ли сделать хэш бесполезным ..) Или я делаю что-то неправильно при вычислении хэшей? Кодирование?
Edit:
Сниппет выше всего лишь пример. В конце концов, мне нужен метод, который принимает строку, вычисляет хэш строки и возвращает ее. HashAlgorithm.ComputeHash
берет байты и возвращает байты, поэтому я использовал UTF8.GetBytes()
/UTF8.GetString()
для преобразования, что кажется огромной ошибкой.
Значит, другая кодировка могла бы исправить это? ASCII? Unicode? Я только что увидел, что с ASCII вывод всегда 32 символа. С unicode это 16. – Atrotygma
Вопрос в следующем: * что вы пытаетесь сделать? * – Jon
Мое намерение состоит в создании случайного и уникального хеша для его использования в качестве идентификатора. В моем «реальном» приложении другие части становятся хешированными, чтобы гарантировать уникальность и случайность. Фрагмент выше - всего лишь пример. То, что я хотел бы иметь, это хэш шестнадцатеричных символов с фиксированной длиной. Но это также общий вопрос «кодирования/криптографии», поскольку я также использую UTF8.GetString/UTF8.GetBytes вместе с генерацией ключей RSA. – Atrotygma