Unieke code, md5 is te lang
Mensen krijgen een brief thuis met een unieke code en kunnen inloggen op mijn pagina met die unieke code.
Alleen kan ik geen goede manier vinden om een unieke code te genereren.
MD5 en SHA1 zijn te lang.
Ik zou het liefste die unieke code willen genereren aan de hand van een string die ik opgeef(net zoals bv bij md5).
Is er een manier om MD5 of SHA1 met een maximale lengte van de code.
Alvast bedankt!
substr(md5(.....), 1, 5);
Andere optie is om een 'password generator' te downloaden en deze een string van x tekens te laten genereren. Als je dan bijhoudt welke codes er al gebruikt zijn (array oid) kan je unieke codes maken.
rand of je neemt je session_id
gewoon beetje werken met Hipska schreef op 20.11.2007 09:49:
gewoon beetje werken met rand of je neemt je session_id
session_id kan niet want die code moet al vooraf gegenereerd zijn en iemand moet het over typen.
werkt eigenlijk goed
maar kan ik dan de originele $str weer terug krijgen vanuit $code die is gegenereerd?
Gewijzigd op 01/01/1970 01:00:00 door OMEGA_ReD
MD5 is net als SHA1 een hash. Een hash is niet te decoderen.
TJVB schreef op 20.11.2007 11:36:
Dat is niet mogelijk, je kunt alleen de ingevoerde code vergelijken door die net zo te coderen.
MD5 is net als SHA1 een hash. Een hash is niet te decoderen.
MD5 is net als SHA1 een hash. Een hash is niet te decoderen.
En helemaal niet meer als je dan een afgekapte hash hebt.
Code (php)
deze gebruik ik zelf voor een unieke code :) ken er natuurlijk ook nog een timestamp en een hash overheen gooien dan weet je zeker dat ie uniek is (hangt natuurlijk ook van de hoeveelheid af).
Het is een kwestie van kolom in een databasetabel aanmaken en daar een UNIQUE opzetten. Wat je vervolgens in die kolom gaat wegschrijven, dat mag je zelf weten. Dat het een unieke waarde is, die garantie heb je, het is tevens de enige mogelijkheid om een unieke waarde te genereren. Je moet tenslotte weten welke waardes je in het verleden al hebt gebruikt.
md5, sha1 en andere hashingmethodes hebben hier niks mee te maken, die leveren geen unieke gegevens op.
pgFrank schreef op 20.11.2007 12:21:
1 is uniek, 2 is uniek, 3 is uniek, 4 uniek, en zo kan ik nog wel even doorgaan...
Het is een kwestie van kolom in een databasetabel aanmaken en daar een UNIQUE opzetten. Wat je vervolgens in die kolom gaat wegschrijven, dat mag je zelf weten. Dat het een unieke waarde is, die garantie heb je, het is tevens de enige mogelijkheid om een unieke waarde te genereren. Je moet tenslotte weten welke waardes je in het verleden al hebt gebruikt.
md5, sha1 en andere hashingmethodes hebben hier niks mee te maken, die leveren geen unieke gegevens op.
Het is een kwestie van kolom in een databasetabel aanmaken en daar een UNIQUE opzetten. Wat je vervolgens in die kolom gaat wegschrijven, dat mag je zelf weten. Dat het een unieke waarde is, die garantie heb je, het is tevens de enige mogelijkheid om een unieke waarde te genereren. Je moet tenslotte weten welke waardes je in het verleden al hebt gebruikt.
md5, sha1 en andere hashingmethodes hebben hier niks mee te maken, die leveren geen unieke gegevens op.
hi bedankt voor je reactie!
heb het gevonden!
dus ik zou dan met md5 id's kunnen genereren en in die unique kolom kunnen zetten, als de tabel een andere waarde ergens vind die hetzelfde is krijg ik een melding??
thx!
Gewijzigd op 01/01/1970 01:00:00 door OMEGA_ReD
Als je een waarde in probeert te voeren die al bestaat, krijg je inderdaad een foutmelding. Met mysql_errno() kun je controleren welke foutcode je terug krijgt en als dat 1062 is, weet je dat de waarde al bestaat.
MySQL geeft geen naam van een constraint door, uitsluitend de melding dat er ergens een constraint is overtreden. De details mag je dan lekker zelf uit gaan zoeken... Met mysql_errno() krijg je foutnummer 1062 voor je kiezen, maar dit kan dus van alles en nog wat betekenen.
@Blanche: Je doet de aaname dat het deze UNIQUE-constraint is, de zekerheid krijg je alleen door met een SELECT-query to controleren of dat ook daadwerkelijk het geval is. Een tabel kent vrijwel altijd meerdere contraints, denk bv. aan de PK, die kunnen allemaal een foutmelding geven.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Quote:
Te lang...??
substr(md5(.....), 1, 5);
substr(md5(.....), 1, 5);
Quote:
Als je een substr() toepast op md5 wil dat overigens niet zeggen dat de string altijd uniek is! Dat is bij een volledige md5-string al niet zo (alhoewel het zelden zal voorkomen dat je exact dezelfde hash krijgt bij 2 strings), maar bij maar 5 tekens wordt de kans op gelijke uitkomsten wel een stuk groter.Wat je kan doen is een MD5 hash maken en daarvan een substr te gebruiken.
maar ik probeer het wel en zie het vanzelf wel.
ik laat het hier wel even horen.
maar ik wist niet dat md5 zelf ook dubbele waardes konden hebben met verschillende waardes.
is sha1 beter dan md5?
sha1 heeft minder collisions dan md5, intelligent kraken kost dus meer tijd. Brute force kraken kan altijd, maar dan maakt de hashing methode niet meer uit.