BigQuery FARM_FINGERPRINT caso de Colisión

0

Pregunta

El farm_fingerprint valor en BigQuery es el mismo para las dos cadenas diferentes. Alguna idea de por qué? Devuelve -2660876244907183769

SELECT id1, id2, id1=id2 AS is_equal
FROM (SELECT FARM_FINGERPRINT(TO_JSON_STRING(STRUCT('19BD0AF0854E2B90E10080000A802438','599D7E2A47B31E20E10080000A7824B8','001','020','100'))) AS id1,
FARM_FINGERPRINT(TO_JSON_STRING(STRUCT('DCE500729B5800F0E10080010A7824BA','5AF0A97293195320E10080010A782421','001','001','110'))) AS id2)
google-bigquery hash
2021-11-24 00:09:05
1

Mejor respuesta

0

En general es bastante trivial para encontrar colisiones en cualquiera de 64 bits de hash. Por lo tanto, ninguna de 64 bits hash puede garantizar la unicidad, cuando gran cantidad de valores indexados. FARM_FINGERPRINT utiliza Fingerprint64 función en farmhash de la biblioteca , que es una de 64 bits algoritmo de hash, así que podrías utilizar una diferente función de hash como MD5, SHA256, SHA512, etc. como es más estandarizado. Ver más funciones hash.

También un asunto público tracker se abrió con respecto a este problema similar pero finalmente fue cerrado desde las colisiones utilizando cualquier algoritmo de hash que va a suceder. Pero todavía puede ser un tiempo muy largo. Ver https://crypto.stackexchange.com/questions/47809/why-havent-any-sha-256-collisions-been-found-yet

2021-11-24 05:20:21

Gracias por la aclaración!
Shawn

@Shawn, si esto responde a tu pregunta, considere la posibilidad de aceptar haciendo clic en la marca de verificación en el lado izquierdo. Ver también ¿Qué debo hacer cuando alguien responde a mi pregunta?
Dondi

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................