Возможно ли столкновение SHA-512 с использованием этой стратегии создания хеша?

Предполагая, что я использую этот код для генерации хэшей:

static void Main(string[] args) {

    string id = Guid.Parse("8681941A-76C2-4120-BC34-F800B5AAB5A5".ToLower()).ToString();
    string date = DateTime.Today.ToString("yyyy-MM-dd");

    Console.WriteLine(id);
    Console.WriteLine(date);

    using (System.Security.Cryptography.SHA512Managed hashTool = 
        new System.Security.Cryptography.SHA512Managed()) {

        Byte[] PasswordAsByte = System.Text.Encoding.UTF8.GetBytes(string.Concat(id, date));
        Byte[] EncryptedBytes = hashTool.ComputeHash(PasswordAsByte);
        hashTool.Clear();

        Console.WriteLine(Convert.ToBase64String(EncryptedBytes));

    }
    Console.ReadLine();
}

В реальном примере я сгенерирую хэши с GUID и датой, как вы видите на примере. Я получу эти значения из базы данных.

При таком подходе возможно ли когда-нибудь получить одинаковый результат хеширования с разными значениями?

Редактировать:

Как я уже сказал, я потяну базу данных значений. Как вы можете догадаться, Guid - это уникальный идентификатор ключа (если я не сталкиваюсь с чудом, и сервер sql генерирует один и тот же Guid для меня несколько раз). И значение datetime будет датой оплаты для записи. Я продемонстрировал здесь с DateTime.Today но я не буду определенно использовать это на продукт.

3 ответа

Решение

Вы обязательно получите хеш-коллизию для данного GUID, который был получен более одного раза в один и тот же день. Например, если вы генерируете хеш для определенного GUID gпотом тянет g в 2012-02-20 в 12:00 выдает тот же хеш, как если бы вы извлекли его в 18:00, поскольку вы учитываете только дату, а не время.

Для несвязанных идентификаторов GUID все еще возможно столкновение хеша. Пространство возможных хэшей составляет 64 бита, что меньше бесконечности, что означает, что обязательно должны быть повторы в соответствии с принципом голубых дыр. Тем не менее, это крайне маловероятно - на самом деле, это настолько маловероятно, что вы должны рассматривать его как ноль.

Как и в любой хэш-функции, это может случиться очень и очень редко.

Хорошая хеш-функция дает другой результат от двух соседних входов. SHA512 считается хорошим алгоритмом хеширования, поэтому он не должен быть проблемой в вашем случае.

Я не понимаю все эти обсуждения? даже если у вас есть 10 миллионов записей в вашей базе данных, вероятность столкновения равна

0.000000000003% (посмотрел, что для sha256, поэтому шансы для sha512 еще меньше)

даже если у вас есть 100 миллионов записей, вам не стоит об этом беспокоиться, и если вы действительно хотите быть уверены, поместите что-нибудь между текстом, а затем хешируйте его.

$newtext= wordwrap("mytexttexttext", 8, "myspliter", true);
Другие вопросы по тегам