Я не знаком с алгоритмами хеширования и рисками, связанными с их использованием, и поэтому у меня есть вопрос о ответе ниже, который я получил на предыдущий вопрос.,,
Исходя из комментария о том, что значение хеш-функции при кодировании в ASCII должно соответствовать 16 символам ASCI, решение в первую очередь состоит в выборе некоторой криптографической хеш-функции (семейство SHA-2 включает SHA-256, SHA-384 и SHA-512) затем обрезать вывод выбранной хеш-функции до 96 бит (12 байтов), то есть сохранить первые 12 байтов вывода хеш-функции и затем отбросить оставшиеся байты,для кодирования base-64 усеченного вывода до 16 символов ASCII (128 бит), что в результате дает эффективный 96-битный криптографический хэш.
Если я подставляю строку в кодировке base-64 в 16 символов, это принципиально отличается от того, чтобы сохранить первые 12 байтов хеш-функции, а затем кодировать их в base-64?Если да, то может ли кто-нибудь объяснить (предоставить пример кода) усечение массива байтов?
Я протестировал подстроку полного значения хеш-функции для 36 000+ различных значений и не имел коллизий.Код ниже является моей текущей реализацией.
Спасибо за любую помощь (и ясность), которую вы можете предоставить.
public static byte[] CreateSha256Hash(string data)
{
byte[] dataToHash = (new UnicodeEncoding()).GetBytes(data);
SHA256 shaM = new SHA256Managed();
byte[] hashedData = shaM.ComputeHash(dataToHash);
return hashedData;
}
public override void InputBuffer_ProcessInputRow(InputBufferBuffer Row)
{
byte[] hashedData = CreateSha256Hash(Row.HashString);
string s = Convert.ToBase64String(hashedData, Base64FormattingOptions.None);
Row.HashValue = s.Substring(0, 16);
}
[Исходное сообщение] (/3013919/suschestvuet-li-algoritm-heshirovaniya-kotoryi-sozdaet-razmer-hesha-v-64-bita-v-c)