MD5-hash van string als sleutel voor array

Ik ben op zoek naar een aantal waarden voor een string, en wilde een soort sleutel voor een array krijgen om zijn 'waarden te behouden, bijvoorbeeld:' Dit is een test '

$tmpAr['ce114e4501d2f4e2dcea3e17b546f339'] = array("somevar" => "somedata", "morevar" => "moredata");

De reden dat ik het op deze manier zou willen doen, is omdat ik niet precies weet welke tekst als sleutel zal worden gebruikt, en in plaats daarvan alle mogelijke problemen uit de weg zou ruimen, de hasj zou ervoor zorgen.

Er zullen waarschijnlijk minder dan 100 strings in elke groep zitten, dus de waarschijnlijke hoeveelheid dubbele sleutels is erg klein.

Is er een probleem met het gebruik hiervan?

0
Onduidelijk wat u bedoelt met "mogelijk problematische stukken verwijderen". Leg meer uit. In het bijzonder is een hash extreem gevoelig voor kleine wijzigingen in de gegevens.
toegevoegd de auteur Thilo, de bron
Als de tekenreeks die wordt gebruikt als de sleutel een regeleinde bevat, kan dit onvoorspelbare resultaten opleveren. Ik vind het niet leuk om alle "slechte" personages eruit te halen om de hash te maken.
toegevoegd de auteur eagle12, de bron
@Thilo - een hash is extreem gevoelig voor kleine veranderingen - Geen grapje.
toegevoegd de auteur Jared Farrish, de bron
Nee, waarschijnlijk niet.
toegevoegd de auteur Jared Farrish, de bron

1 antwoord

Dit is geen goede methode omdat je belangrijke botsingen kunt hebben. Zoals je kunt lezen van wikipedia

MD5 is niet bestand tegen botsingen

Over het algemeen is het gebruiken van de hashing-functie om een ​​sleutel te maken nooit een goede keuze vanwege het principe van de duiventil . De belangrijkste botsingen veroorzaken een overschrijving van de waarden in die arraypositie en dit gedrag zal zeer moeilijk te debuggen zijn. Zo loop je in ernstige problemen en hoofdpijn.

Samenvattend, stel ik voor dat je een andere manier bedenkt om je sleutels te creëren die je de uniciteit van de zaken garanderen.

3
toegevoegd
Neem indien nodig uitgebreide discussies op chat.stackoverflow.com .
toegevoegd de auteur Sampson, de bron
Jongens, ruim deze discussie op, of een moderator zal ...
toegevoegd de auteur Thilo, de bron
@JaredFarrish: Wat is er mis met het gebruik van de invoerreeks zelf als sleutel? We hebben meer uitleg nodig over deze 'problematische stukken', waarom ze problematisch zijn en hoe een hash voor ze zorgt.
toegevoegd de auteur Thilo, de bron
Sommige van de problematische gegevens zijn speciale tekens, regeleinden enz. Ik wilde het proces vereenvoudigen door een hash-sleutel te maken om het gemakkelijker te maken om te vinden wat ik zoek in de array, en tenzij ik de index ken op basis van de string een algemene index werkt gewoon niet. Hoewel ik begrijp dat er een kans is dat er een botsing kan zijn, ben ik niet helemaal overtuigd door het wiki-artikel, dat in zo'n kleine subset van gegevens dit naar voren zal komen. Ik zou absoluut graag andere ideeën horen, omdat ik in de array moet zoeken op basis van de tekenreeks en het gebruik van een arrayzoekopdracht te traag is.
toegevoegd de auteur eagle12, de bron
@Thilo - Ik kan me niet herinneren dat ik zei dat daar iets mis mee was. Ter beoordeling: "Wat is het voorgestelde antwoord?"
toegevoegd de auteur Jared Farrish, de bron
@AurelioDeRosa - Toegegeven, we zijn (tenminste door jouw antwoord) aan de tegenovergestelde kanten hiervan, omdat ik niets verkeerds zie aan het gebruik van MD5 om een ​​pseudo-willekeurige array-sleutel te genereren. Alles wat ik te zeggen heb is: "Wat is er nog meer eigenlijk willekeurig?"
toegevoegd de auteur Jared Farrish, de bron
Laat me de kansen zien. Laat me een aantoonbaar betere manier zien.
toegevoegd de auteur Jared Farrish, de bron
@Thilo - Geen probleem, vrijheid is rommelig.
toegevoegd de auteur Jared Farrish, de bron
@AurelioDeRosa - Zie mijn oorspronkelijke opmerking over de vraag. Ik denk niet dat het een probleem is om te doen wat het OP suggereert. Het is wat het is.
toegevoegd de auteur Jared Farrish, de bron
Deze vraag is gesteld door Don Quixote.
toegevoegd de auteur Jared Farrish, de bron
@AurelioDeRosa - Ik weet dat je vrij onbuigzaam bent in je begrip, maar als je op een dag beslissingen wilt nemen, moet je vaak het slechte in balans brengen met het goede en een goede indruk maken ( raden ) over wat is de juiste manier om te gaan. Zeggen "Hel nee, dit klopt niet" is niet hoe een leider leidt. Je moet in ieder geval kunnen laten zien waar je naartoe moet gaan. "Het is wat het is" betekent vaak "Dit is wat ik heb gevonden en dit is hoe ik verandering beïnvloed". Vertel me niet hoe je voortgang blokkeert , vertel me hoe je de voortgang zult beïnvloeden .
toegevoegd de auteur Jared Farrish, de bron
Ik denk dat het alleen maar beter zou zijn als je gewoon de gewone index zou gebruiken in plaats van het hele proces te compliceren. Hoe dan ook, als je wat gegevens over de array wilt doorzoeken, zijn er eigenlijk functies op PHP die dat voor jou kunnen doen voor snellere resultaten. ;)
toegevoegd de auteur Christopher Pelayo, de bron
Ik heb al een optie voorgesteld en het gebruik van de gewone index vanaf 0, enzovoort, probeerde je alleen maar te helpen een vraag te stellen als je denkt dat we niet het juiste antwoord geven, maar het is goed. :)
toegevoegd de auteur Christopher Pelayo, de bron