Witam,
Mam propozycję zmian w systemie dodawania konentarzy na Vortalu. Obecnie każdego użytkownika wystawiającego komentarz identyfikuje podana przez niego nazwa, jego USER AGENT i dodatkowo każdy wpis komentarza ma podaną datę i godzinę - tak jak widać :
nazwa_uzytkownika 12.06.2006, 17:54
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Ja mam lepszą propozycję - trochę myślałem o tym jak ukrócić wpisywanie się tych samych użytkowników pod różnymi ksywkami i doszedłem do wniosku że podawanie IP użytkownika to nie jest dobry pomysł, gdyż wprowadziłoby to na vortalu totalną inwigilację - każdy bałby się napisać coś “niegrzecznego” w obawie przed konsekwencjami.
Więc wpadłem na ZNACZNIE lepszy pomysł. Obok nazwy użytkownika mógłby się pojawiać WYGENEROWANY NA PODSTAWIE IP NIEODWRACALNIE ZASZYFROWANY HASH ( http://pl.wikipedia.org/wiki/Hash ). Teraz identyfikacja użytkownika na vortalu wyglądałaby na przykład tak :
nazwa_uzytkownika | IPHASH : HG-VM-L6-G0 | 12.06.2006, 17:54
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Pozwoliłem sobie napisać w PHP skrypt generujący taki hash. Funkcja jest naprawdę EKSTRASZYBKA (prawdopodobnie najszybsza z funkcji hashujących), a to dlatego że w działaniu wykorzystuje
TYLKO działania dodawania i odejmowania. Powinna także być dość odporna na kolizje, jako że ilość danych wejściowych jest bardzo duża (większa od długości samego IP). Oczywiście odporność na kolizje zależy najbardziej od DŁUGOŚCI hasha sprecyzowanego zmienną $hashlen.
Myślę że sama implementacja tego nie będzie problemem (prosta jak dwa młotki i pół gwoździa :D), a jeśli jest, to mogę to zrobić za was - wystarczy że wyślecie do mnie skrypt wstawiający komentarze. Od razu mówię, że NIE TRZEBA dodawać dodatkowego POLA DO TABELI MYSQL, żeby zapisać w nim identyfikację. Można to zrobić prościej.
Jets to dobra funkcja hashująca, a jest dobra dlatego, że zmiana KTÓREGOKOLWIEK BITU (lub dodanie lub odjęcie bitu) w ciągu wejściowym powoduje otrzymanie CAŁKOWICIE INNEGO HASHU - np :
hash dla “127.0.0.1” to “1W-16-Z7-Q4”
ale hash dla “127.0.0.2” to już “UL-BI-JE-4J”
oraz “227.0.0.1” daje “2C-ZR-3C-3K”
Kod skryptu poniżej
http://www.geocities.com/the_soofman19/newcomment.txt
EDIT :
Jeśli ciąg XX-XX-XX-XX jest za długi, to można zmienić długość ciągu (wartość zmiennej $hashlen) na 6 - wtedy hash przyjmie postać XX-XX-XX, ale oczywiście będzie mniej odporny na kolizje.