Kodowanie ciągu znaków do liczby szesnastkowej


(Kamycki Szymon) #1

Witam!

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.


(somekind) #2

Może to przez to, że jest późno, ale liczby szesnastkowe o nieparzystej liczbie znaków wydają mi się jakieś takie egzotyczne.

Jak rozumiem szukasz jakiejś funkcji skrótu, jak np. CRC

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?


(Kamycki Szymon) #3

Witam!

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.


(somekind) #4

To chyba nic dziwnego, MD5 ma to do siebie, że jest 128 bitowy.

A nie myślałeś, żeby wygenerowany przez taki snippet hash zwyczajnie przyciąć do określonej długości?

Poza tym - czy to w ogóle musi być hash? Nie wystarczy jakiś losowy ciąg znaków?


(Kamycki Szymon) #5

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.


(somekind) #6

Możemy. Możemy także być sprytni i się przed tym zabezpieczyć :slight_smile:

Też można. Można także wygenerować GUIDa i go obciąć.

Możliwości jest wiele, wybierz tą, którą najłatwiej Ci zaimplementować.