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

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

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 ]

1 голос
/ 21 февраля 2012

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

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

0 голосов
/ 30 мая 2012

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

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

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

$newtext= wordwrap("mytexttexttext", 8, "myspliter", true);
0 голосов
/ 21 февраля 2012

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

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

...