Czy zna może ktoś jakiś algorytm, który zakoduje mi ciąg znaków (o różnej długości) do postaci liczby szesnastkowej o ograniczonej długości znaków. Kodowanie ma być w jedną stronę, tzn. bez konieczności odzyskiwania zakodowanej wartości.
Dla przykładu:
jako string podaje “Jakis przykładowy napis”, co po zakodowaniu daje mi liczbę szesnastkową o max. 7 znakach.
Ale ja bym jednak proponował nie kombinować i użyć MD5. Sądzę, że najprościej i najlepiej.
No, chyba, że nie możesz tego użyć. Po co Ci to w ogóle? Chcesz w bazie danych przechowywać zahashowane hasła użytkowników, a w trakcie logowaniu porównywać przy użyciu tej funkcji?
Sprawa dotyczy Adobe Flash. Jeśli chcesz do niego dodać pliki helpa to m. in. musisz mieć 2 pliczki: InlelliSense i help.map. Ten pierwszy to plik xml, w którym każdy element (klasa, metoda, atrybut…) reprezentowany jest przez node zawierającą atrybut helpid. Ów jest liczbą dziesiętną (narazie wpisywaną na sztywno) inkrementowaną dla każdego elementu helpa. W pliku help.map wpisywana jest ta liczba zapisana w systemie szesnastkowym i na początku doklejany jest przedrostek “x2”, a obok niej scieżka do pliky helpa (html) w którym znajduje się pomoc do wybranego przez nas elementu. Myk polega na tym, żeby nie duplikować tych liczb szesnastkowych w różnych helpach do API we Flash-u, bo spowodować to może złe odsyłanie do plików helpa. Metodą empiryczną wyumkałem, że ta liczba szesnastkowa może mieć max. 7 znaków hex.
Znalazłem jakieś snippety kodu w Javie gdzie String hashowany jest przy pomocy MD5, lecz niestety nie można zdefiniować długości wyjściowego hasha.
Losowy ciąg znaków raczej się nie nadaje, bo możemy losowo wygenerować takie same ciągi znaków dla różnych elementów helpa. Jeśli chodzi o obcinanie to chyba najlepiej wygenerować CRC32 który jest szesnastkowo 8-znakowy i wywalić MSP albo LSP.