Funkcja hashująca w dwie strony

Mamy wyraz: “Marek” i jaką funkcją trzeba było by to zahashować aby np. po uzyskaniu hashu “dei43ls9dk” móc go funkcją odwrotną przerobić i uzyskać słowo wyjściowe “Marek”.

Czy istnieje taka funkcja?

A czemu ma służyć to “haszowanie”? Z definicji powinno być trudno odtworzyć pierwotne dane na podstawie skrótu. Rodzi się więc pytanie: do czego ma to służyć?

Najlepiej napisać coś własnego, jednak jak kolega napisał wyżej. Dostaniesz odpowiednią ilość kluczy i nic nie da rady. Nawet sole tutaj nic nie dadzą.

(nie napisałeś, jaki język cię interesuje)

jeśli chodzi Ci tylko o jakąś dwukierunkową formę zmiany reprezentacji napisów na nieczytelne dla człowieka możesz użyć np. base64 : http://pl.wikipedia.org/wiki/Base64

Przykład

$ echo Marek | base64

TWFyZWsK

$ echo TWFyZWsK | base64 -d

Marek

Kolega myli chyba hashowanie z szyfrowaniem. Funkcje hashujące z definicji są tworzone by danych nie dało się odtworzyć. Jeżeli zależy Ci na takim rozwiązaniu to spróbuj coś samemu wymyślić, funkcje na pewno są jakieś poszukaj w google: szyfrowanie.

Chciałem napisać funkcję, która skracała mi by linki.

Mając dłuższy link: www.mojastrona.pl/index.php?module=przyklad&action=znajdz&grupa=4&formacja=2&cosTam=cosTam&znowuCos=znowuCos

ciąg znaków: module=przyklad&action=znajdz&grupa=4&formacja=2&cosTam=cosTam&znowuCos=znowuCos przejechać funkcją hashującą która dała by np. 8 znaków. I otrzymałbym link: www.mojastrona.pl/12345678 i dalej to już jest jasne.

Jest bardzo dużo stron do skracania linków - czemu nie użyć jednej z nich?

Wiem, nawet są gotowe rozszerzenia (akurat ta strona jest na Joomla!), jednak chciałem to napisać po swojemu.

Pomyślałem sobie o takim rozwiązaniu, aby utworzyć tabelę w bazie danych i tam zapisywać “długi” link i krótki jemu odpowiadający. Potem przeszukiwać w bazie i przekierowywać?

Podejrzewam, że mniej więcej tak działają tego typu strony.

I do tego nie potrzeba żadnej funkcji haszującej, wystarczy wygenerować kolejne ID albo losowy ciąg znaków.

Sama idea dość ciekawa, tzn co wpiszesz to na tą stronę cie przekieruje. To z bazą lepsze w wypadku tworzenia kolejnych rekordów dla baz. Ale np miejmy sobie bez tej bazy pokazywać linki do innych stron. Największym problemem byłaby ilość witryn bo owego skrócenia. Bez kolizji musiało by to mieć dość sporo znaków. Innymi słowy nie ma sensu innego sposobu niż baza.

Technicznie ciężko sobie to wyobrazić poza tym to nie przypadek że funkcje hashujące mogą znacznie skrócić ciąg bo ich przeznaczeniem jest nie zachowanie danych tylko próba wygenerowania czegoś nowego w miarę krótkiego i zawsze niepowtarzalnego.

A skrócić 400 bajtowy ciąg znaków do np 10 bajtowego i później z powrotem to tylko chyba Lord Voldemort potrafi :smiley:

Tworzysz tabele z dwoma kolumnami;

Pierwsza: długi url’e;

Druga krótkie url’e;

Wyświetlasz w przeglądarce krótkie gdy ktoś kliknie podmieniasz na długie. Coś takiego jest proste do wykonania. Oczywiście z użycie bazy danych.

Będę pisał to z bazą danych.

Dzięki