Jag hade lust att göra en liten krypteringsfunktion i en lagrad procedur för mySql 5+ och återanvända lösenordet varje gång men ändå göra den lite "säkrare" genom att lägga till lite slumpade bokstäver/siffror.
Detta gör jag med två stycken lagrade procedurer varpå jag kallar på funktionen RandChars i funktionen Kryptonit.
Kryptera:
SELECT Kryptonit('Kalle',1) Krypterad
Resultat: 56B76F4F1366C30CA639A5FEB84D45F0
Dekryptera:
SELECT Kryptonit('56B76F4F1366C30CA639A5FEB84D45F0',0) Dekrypterad
Resultat: Kalle
Vad skall ja nu använda detta till?
Jo jag tänkt att mina "medlemmar" skulle få ett mail varpå de skall klicka på en länk och för att verifiera att personen klickat på "rätt" länk med rätt id så skulle jag kunna skicka med det krypterade id:t/namnet i länken och se till att de matchar.
CREATE FUNCTION `Kryptonit`(str varchar(2000),met tinyint(1)) RETURNS varchar(4000)
BEGIN
DECLARE secureKey varchar(13);
DECLARE outpt varchar(2000);
Set secureKey = '6uQ%t-Td_*';
If met = 1 then
RETURN HEX(AES_ENCRYPT(concat(RandChars(6),str),secureKey));
Else
Set outpt = AES_DECRYPT(UNHEX(str),secureKey);
RETURN Right(outpt,length(outpt)-6);
End if;
END;
CREATE FUNCTION `RandChars`(chr tinyint) RETURNS varchar(50)
BEGIN
DECLARE v1 INT DEFAULT chr;
DECLARE str varchar(62);
DECLARE build varchar(10) default '';
Set str = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVXYZ";
WHILE v1 > 0 DO
SET build = concat(build,MID(str,(RAND() * 61)+1, 1));
SET v1 = v1 - 1;
END WHILE;
RETURN build;
END;
Ett tips är att inte använda för långa strängar då min lilla slumpfunktion slutar tappa i värde...
Kommentera gärna funktion och nytta.
