🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
23 messages
23 total messages Started by Pancio Mon, 12 Mar 2018 10:25
Kodowanie BASE36
#346432
Author: Pancio
Date: Mon, 12 Mar 2018 10:25
8 lines
1658 bytes
Witam serdecznie,
Czy ma moze ktos z Was jakies zrodla z funkcjami do kodowania (i odkodowywania) zadanego stringu kodem BASE36, wzglednie moze tez byc BASE32.
Bez problemu gotowe przyklady dla Delphi mozna znalezc dla BASE64, ale najbardziej zalezy mi na BASE36.
Gotowych konwerterow on-line jest cale mnostwo, ale nigdzie w sieci nie moge sie doszukac gotowego kodu dla Delphi.
Pomozecie? Z gory wielkie dzieki.

--
Pancio
Re: Kodowanie BASE36
#346433
Author: Roman Tyczka
Date: Mon, 12 Mar 2018 11:48
16 lines
1490 bytes
On Mon, 12 Mar 2018 03:25:34 -0700 (PDT), Pancio wrote:

> Czy ma moze ktos z Was jakies zrodla z funkcjami do kodowania (i odkodowywania) zadanego stringu kodem BASE36, wzglednie moze tez byc BASE32.
> Bez problemu gotowe przyklady dla Delphi mozna znalezc dla BASE64, ale najbardziej zalezy mi na BASE36.
> Gotowych konwerterow on-line jest cale mnostwo, ale nigdzie w sieci nie moge sie doszukac gotowego kodu dla Delphi.
> Pomozecie? Z gory wielkie dzieki.

Myślę, że mniej czasu byś stracił na konwersję wersji z basica:

https://en.wikipedia.org/wiki/Base36

niż pisanie posta ;-)

-- 
pozdrawiam
Roman Tyczka
Re: Kodowanie BASE36
#346434
Author: Pancio
Date: Mon, 12 Mar 2018 12:10
13 lines
1824 bytes
> Myślę, że mniej czasu byś stracił na konwersję wersji z basica:
> 
> https://en.wikipedia.org/wiki/Base36
> 
> niż pisanie posta ;-)


Wlasnie przez to napisalem ten post, zeby bylo wiadomo, iz szukam rozwiazania (czyt. gotowca), do konwersji StringToBase36 (i w druga strone).
O ile Twoj link jest bardzo pomocny, to zalatwia on jedynie sprawe w kierunku IntegerToBase36.
Niemniej jednak, dziekuje za zainteresowanie.

--
Pancio
Re: Kodowanie BASE36
#346441
Author: Jan Drawski
Date: Mon, 12 Mar 2018 12:12
12 lines
1465 bytes
> Gotowych konwerterow on-line jest cale mnostwo, ale nigdzie w sieci nie moge sie doszukac gotowego kodu dla Delphi.
> Pomozecie? Z gory wielkie dzieki.

W Google wpisałem "base36 delphi" i od razu wyskoczyło kilka stron z 
kodami Delphi. Przykładowe linki:
http://www.piclist.com/techref/language/delphi/swag/MATH0034.html
http://delphitipsandtricks.blogspot.com/2013/09/convert-decimal-number-string-to-base36.html
http://delphi.cjcsoft.net/viewthread.php?tid=47408

-- 
Pozdrawiam
Janek
Re: Kodowanie BASE36
#346446
Author: Pancio
Date: Mon, 12 Mar 2018 12:26
20 lines
2237 bytes
W dniu poniedziałek, 12 marca 2018 13:12:17 UTC+1 użytkownik Jan Drawski napisał:
> > Gotowych konwerterow on-line jest cale mnostwo, ale nigdzie w sieci nie moge sie doszukac gotowego kodu dla Delphi.
> > Pomozecie? Z gory wielkie dzieki.
> 
> W Google wpisałem "base36 delphi" i od razu wyskoczyło kilka stron z 
> kodami Delphi. Przykładowe linki:
> http://www.piclist.com/techref/language/delphi/swag/MATH0034.html
> http://delphitipsandtricks.blogspot.com/2013/09/convert-decimal-number-string-to-base36.html
> http://delphi.cjcsoft.net/viewthread.php?tid=47408
> 
> -- 
> Pozdrawiam
> Janek


Dzięki za info, ale też widziałem te strony.
Jest z nimi ten sam kłopot, o którym pisałem poprzednio - dotyczą one konwersji liczb, a nie stringów z dowolnie wpisanym tekstem :(

--
Pancio
Re: Kodowanie BASE36
#346435
Author: Roman Tyczka
Date: Mon, 12 Mar 2018 13:18
31 lines
1977 bytes
On Mon, 12 Mar 2018 05:10:14 -0700 (PDT), Pancio wrote:

>> Myślę, że mniej czasu byś stracił na konwersję wersji z basica:
>> 
>> https://en.wikipedia.org/wiki/Base36
>> 
>> niż pisanie posta ;-)
> 
> 
> Wlasnie przez to napisalem ten post, zeby bylo wiadomo, iz szukam rozwiazania (czyt. gotowca), do konwersji StringToBase36 (i w druga strone).
> O ile Twoj link jest bardzo pomocny, to zalatwia on jedynie sprawe w kierunku IntegerToBase36.
> Niemniej jednak, dziekuje za zainteresowanie.

Ale to jest dokładnie to samo, tylko zamiast inta lecisz po tablicy bajtów.
Wszystkie te kodowania mają ten sam algorytm, bo to wszak inne systemy
liczbowe, nie dziesiętny bazujący na cyfrach 0..9 tylko tu akurat
trzydziestoszóstkowy z umownymi cyframi:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

i teraz bierzesz każde 6 bitów z wejścia i mapujesz je na "cyfrę" 36-kową z
tej powyższej tablicy.

Proste :-)


ps. weryfikacji możesz dokonywać na onlinowych encoderach

-- 
pozdrawiam
Roman Tyczka
Re: Kodowanie BASE36
#346437
Author: Pancio
Date: Mon, 12 Mar 2018 13:48
15 lines
2224 bytes
> Tu akurat trzydziestoszóstkowy z umownymi cyframi:
> 
> 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
> 
> i teraz bierzesz każde 6 bitów z wejścia i mapujesz je na "cyfrę" 36-kową z
> tej powyższej tablicy.
> 
> Proste :-)

Cześć,
Tak, w teorii wydawało mi się to proste, ale po kilku dniach dłubania postanowiłem jednak poszukać jakiegoś gotowca. Jednak sprawa okazuje się nie całkiem taka prosta, bo gotowych listingów (ot tak mi się przypomniało jeszcze z czasów 8-bitowych Atari) nigdzie nie mogę znaleźć.
Podejrzewam, że jest to zaledwie kilka linijek kodu (w jedną stronę) i kolejne kilka linijek w drugą (decrypt). Ale jakoś nie za bardzo mi to wychodzi :(  No i przez to szukam tutaj pomocy i rozwiązania.

--
Pancio
Re: Kodowanie BASE36
#346436
Author: Roman Tyczka
Date: Mon, 12 Mar 2018 13:52
15 lines
1850 bytes
On Mon, 12 Mar 2018 06:48:07 -0700 (PDT), Pancio wrote:

>> i teraz bierzesz każde 6 bitów z wejścia i mapujesz je na "cyfrę" 36-kową z
>> tej powyższej tablicy.
>> 
>> Proste :-)
> 
> Tak, w teorii wydawało mi się to proste, ale po kilku dniach dłubania postanowiłem jednak poszukać jakiegoś gotowca. Jednak sprawa okazuje się nie całkiem taka prosta, bo gotowych listingów (ot tak mi się przypomniało jeszcze z czasów 8-bitowych Atari) nigdzie nie mogę znaleźć.
> Podejrzewam, że jest to zaledwie kilka linijek kodu (w jedną stronę) i kolejne kilka linijek w drugą (decrypt). Ale jakoś nie za bardzo mi to wychodzi :(  No i przez to szukam tutaj pomocy i rozwiązania.

Wrzuć kod jaki wyskrobałeś, zobaczymy czy coś da się w nim poprawić.

-- 
pozdrawiam
Roman Tyczka
Re: Kodowanie BASE36
#346449
Author: Jan Drawski
Date: Mon, 12 Mar 2018 15:54
10 lines
1385 bytes
> Jest z nimi ten sam kłopot, o którym pisałem poprzednio - dotyczą one konwersji liczb, a nie stringów z dowolnie wpisanym tekstem :(

Ale każdy znak to liczba. Np:
Memo1.lines.add(IntToStr(Ord(' ')));
Podaj tekst do konwersji, wynik, link do kalkulatora online, który to 
realizuje.

-- 
Pozdrawiam
Janek
Re: Kodowanie BASE36
#346451
Author: Pancio
Date: Mon, 12 Mar 2018 16:00
11 lines
2039 bytes
> Ale każdy znak to liczba. Np:
> Memo1.lines.add(IntToStr(Ord(' ')));
> Podaj tekst do konwersji, wynik, link do kalkulatora online, który to 
> realizuje.

Oczywiście jest to jakieś rozwiązanie, ale zamiast posiłkować się zewnętrznymi konwerterami, to jednak wolałbym, aby to aplikacja kodowała zadany tekst.
Próbuję już któryś dzień odszukać czegoś w sieci, ale niezbyt dobrze mi idzie, a sam niestety nie potrafię ogarnąć tego tematu.
No i utknąłem w martwym punkcie...

--
Pancio
Re: Kodowanie BASE36
#346438
Author: Krzysztof Szyszka
Date: Mon, 12 Mar 2018 16:42
26 lines
2153 bytes
> > Wlasnie przez to napisalem ten post, zeby bylo wiadomo, iz szukam rozwiazania (czyt. gotowca), 
> > do konwersji StringToBase36 (i w druga strone).
> > O ile Twoj link jest bardzo pomocny, to zalatwia on jedynie sprawe w kierunku IntegerToBase36.
> > Niemniej jednak, dziekuje za zainteresowanie.
>
> Ale to jest dokładnie to samo, tylko zamiast inta lecisz po tablicy bajtów.
> Wszystkie te kodowania mają ten sam algorytm, bo to wszak inne systemy
> liczbowe, nie dziesiętny bazujący na cyfrach 0..9 tylko tu akurat
> trzydziestoszóstkowy z umownymi cyframi:
>
> 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
>
> i teraz bierzesz każde 6 bitów z wejścia i mapujesz je na "cyfrę" 36-kową z
> tej powyższej tablicy.
>
> Proste :-)

Może dla Ciebie to jest proste, ale dla mnie to jednak byłoby niezłe wyzwanie,
żeby zmapować 64 wartości (6 bitów) na 36 "cyfr" a potem te "cyfry" zdekodować ;-)

-- 
pozdrowienia
Krzysztof Szyszka, X-Files Software
Developer of X-DBGrid Component
Embarcadero Technology Partner
http://www.x-files.pl/
Re: Kodowanie BASE36
#346453
Author: Krzysztof Szyszka
Date: Mon, 12 Mar 2018 16:49
19 lines
2005 bytes
> > Ale każdy znak to liczba. Np:
> > Memo1.lines.add(IntToStr(Ord(' ')));
> > Podaj tekst do konwersji, wynik, link do kalkulatora online, który to  realizuje.
>
> Oczywiście jest to jakieś rozwiązanie, ale zamiast posiłkować się zewnętrznymi konwerterami, to
> jednak wolałbym, aby to aplikacja kodowała zadany tekst.

To nie jest żadne rozwiązanie, bo nie może być, bo Base36 nie stosuje się do kodowania stringów,
czy też w ogólności do kodowania ciągów bajtów. Do kodowania stringów (bajtów) możesz używać
Base 16, Base32, Base64, a tu masz oficjalne RFC, które opisuje te 3 kodowania:

https://tools.ietf.org/html/rfc4648

-- 
pozdrowienia
Krzysztof Szyszka, X-Files Software
Developer of X-DBGrid Component
Embarcadero Technology Partner
http://www.x-files.pl/
Re: Kodowanie BASE36
#346472
Author: Jan Drawski
Date: Mon, 12 Mar 2018 17:41
13 lines
1671 bytes
>> Podaj tekst do konwersji, wynik, link do kalkulatora online, który to
>> realizuje.
> 
> Oczywiście jest to jakieś rozwiązanie, ale zamiast posiłkować się zewnętrznymi konwerterami, to jednak wolałbym, aby to aplikacja kodowała zadany tekst.

Źle mnie zrozumiałeś, powtórzę: "Podaj tekst do konwersji, wynik"
Żebym mógł sprawdzić jak przetestuję jakiś kod w Delphi.
"link do kalkulatora online" - żebym tam też to mógł sprawdzić, 
zweryfikować.

-- 
Pozdrawiam
Janek
Re: Kodowanie BASE36
#346439
Author: Roman Tyczka
Date: Mon, 12 Mar 2018 20:25
23 lines
1996 bytes
On Mon, 12 Mar 2018 17:42:50 +0100, Krzysztof Szyszka wrote:

>> Ale to jest dokładnie to samo, tylko zamiast inta lecisz po tablicy bajtów.
>> Wszystkie te kodowania mają ten sam algorytm, bo to wszak inne systemy
>> liczbowe, nie dziesiętny bazujący na cyfrach 0..9 tylko tu akurat
>> trzydziestoszóstkowy z umownymi cyframi:
>>
>> 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
>>
>> i teraz bierzesz każde 6 bitów z wejścia i mapujesz je na "cyfrę" 36-kową z
>> tej powyższej tablicy.
>>
>> Proste :-)
> 
> Może dla Ciebie to jest proste, ale dla mnie to jednak byłoby niezłe wyzwanie,
> żeby zmapować 64 wartości (6 bitów) na 36 "cyfr" a potem te "cyfry" zdekodować ;-)

Świnto racjo :-) Trza by po 5 bitów kodować lub tablicę rozszerzyć jak w
Base64, ale reszta bez zmian.

-- 
pozdrawiam
Roman Tyczka
Re: Kodowanie BASE36
#346440
Author: Krzysztof Szyszka
Date: Mon, 12 Mar 2018 21:06
28 lines
2235 bytes
> >> Ale to jest dokładnie to samo, tylko zamiast inta lecisz po tablicy bajtów.
> >> Wszystkie te kodowania mają ten sam algorytm, bo to wszak inne systemy
> >> liczbowe, nie dziesiętny bazujący na cyfrach 0..9 tylko tu akurat
> >> trzydziestoszóstkowy z umownymi cyframi:
> >>
> >> 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
> >>
> >> i teraz bierzesz każde 6 bitów z wejścia i mapujesz je na "cyfrę" 36-kową z
> >> tej powyższej tablicy.
> >>
> >> Proste :-)
> >
> > Może dla Ciebie to jest proste, ale dla mnie to jednak byłoby niezłe wyzwanie,
> > żeby zmapować 64 wartości (6 bitów) na 36 "cyfr" a potem te "cyfry" zdekodować ;-)
>
> Świnto racjo :-) Trza by po 5 bitów kodować ...

No i tak właśnie się robi, ale to Base32, a nie Base36.
Odpowiednie RFC dla Base32 podałem już wcześniej.
Niby podobne do Base64 ale trudniejsze do realizacji.
Do tego dochodzi wybór odpowiedniego  "alfabetu".

-- 
pozdrowienia
Krzysztof Szyszka, X-Files Software
Developer of X-DBGrid Component
Embarcadero Technology Partner
http://www.x-files.pl/
Re: Kodowanie BASE36
#346444
Author: mmm
Date: Tue, 13 Mar 2018 10:39
23 lines
1925 bytes
> Źle mnie zrozumiałeś, powtórzę: "Podaj tekst do konwersji, wynik"
> Żebym mógł sprawdzić jak przetestuję jakiś kod w Delphi.
> "link do kalkulatora online" - żebym tam też to mógł sprawdzić, 
> zweryfikować.
> 
Ja też bym chętnie zobaczył taki konwerter online (albo wynik) dla 
stringów  bo jakoś nie widzę jak to ma działać.

Jedyna koncepcja jaka przychodzi do głowy to czytać tekst po 5 bitów
(i mamy wtedy wartości 0-31) i te liczby kodować BASE36 , bo inaczej to 
jak ?

ALA     = string
65  76 65  = dziesietnie
01000001  01001100 01000001 = binarnie	
010|00001  0|10011|00 0100|0001 =  podzial 5bit	
00001  00010 10011 00010  0100  = 5bit
1       2      19    2     4    = dziesietnie
1       2       J    2     4    =  BASE36
12J24  = wynikowy tekst

M
Re: Kodowanie BASE36
#346463
Author: Jan Drawski
Date: Tue, 13 Mar 2018 11:09
12 lines
1693 bytes
> Jedyna koncepcja jaka przychodzi do głowy to czytać tekst po 5 bitów
> (i mamy wtedy wartości 0-31) i te liczby kodować BASE36 , bo inaczej to 
> jak ?

Bez jakiegoś przykładu to jest tylko gdybanie. W praktyce może być 
różnie, ktoś do algorytmu może wrzucać tylko po 4 bity, żeby mu było 
prościej :) O ile w ogóle to robi bo po prośbie przykładu Pancio 
najpierw nie zrozumiał a później coś ucichł...

-- 
Pozdrawiam
Janek
Re: Kodowanie BASE36
#346467
Author: Pancio
Date: Tue, 13 Mar 2018 11:38
11 lines
2420 bytes
> Bez jakiegoś przykładu to jest tylko gdybanie. W praktyce może być 
> różnie, ktoś do algorytmu może wrzucać tylko po 4 bity, żeby mu było 
> prościej :) O ile w ogóle to robi bo po prośbie przykładu Pancio 
> najpierw nie zrozumiał a później coś ucichł...

Kolejny dzień próbowałem dłubać z tym pseudo standardem kodowania i znów poległem. W sieci dla przykładu można znaleźć taki oto konwerter:
www.dcode.fr/base-36-cipher
Jednak coraz mocniej skłaniam się (jednak!) co BASE64. Mam do tego gotowy kod źródłowy i to w dodatku działający w 100%. Może w przyszłości jeszcze wrócę do tematu, gdy dojrzeję do tego, aby operować na samych bitach zadanego stringu.

--
Pancio
Re: Kodowanie BASE36
#346483
Author: Jan Drawski
Date: Tue, 13 Mar 2018 12:12
11 lines
2004 bytes
> Kolejny dzień próbowałem dłubać z tym pseudo standardem kodowania i znów poległem. W sieci dla przykładu można znaleźć taki oto konwerter:
> www.dcode.fr/base-36-cipher
> Jednak coraz mocniej skłaniam się (jednak!) co BASE64. Mam do tego gotowy kod źródłowy i to w dodatku działający w 100%. Może w przyszłości jeszcze wrócę do tematu, gdy dojrzeję do tego, aby operować na samych bitach zadanego stringu.

Ale na jej stronie masz algorytmy i na pierwszy rzut oka widać, że to 
jest lipa jeżeli chodzi o tekst. Wpisz (wklej) tam paręset znaków i 
sprawdź wynik: "size limited to 100" :)

-- 
Pozdrawiam
Janek
Re: Kodowanie BASE36
#346486
Author: mmm
Date: Tue, 13 Mar 2018 12:38
17 lines
1965 bytes
> Ale na jej stronie masz algorytmy i na pierwszy rzut oka widać, że to 
> jest lipa jeżeli chodzi o tekst. Wpisz (wklej) tam paręset znaków i 
> sprawdź wynik: "size limited to 100" :)
> 

Przy 100 znakach bez spacji policzenie 36^99 nie jest prostą sprawą.
Tego już nie ogarnie żaden wbudowany typ danych .

Jak człowiek ma mało czasu to nie utrudnia sobie życia wymyślając problemy.

Z treści autora wynika ze może użyć base64, wiec powinien tak zrobić, 
jedynym racjonalnym wytłumaczeniem użycia BASE36 jest integracja z 
zewnętrznym systemem który wypluwa w dziwnym standardzie, ale to tez 
powinna zrobić ta druga strona.

M
Re: Kodowanie BASE36
#346469
Author: immo
Date: Tue, 13 Mar 2018 13:40
13 lines
2468 bytes
W dniu wtorek, 13 marca 2018 12:38:14 UTC+1 użytkownik Pancio napisał:
> > Bez jakiegoś przykładu to jest tylko gdybanie. W praktyce może być 
> > różnie, ktoś do algorytmu może wrzucać tylko po 4 bity, żeby mu było 
> > prościej :) O ile w ogóle to robi bo po prośbie przykładu Pancio 
> > najpierw nie zrozumiał a później coś ucichł...
> 

> Jednak coraz mocniej skłaniam się (jednak!) co BASE64. Mam do tego gotowy kod źródłowy i to w dodatku działający w 100%. Może w przyszłości jeszcze wrócę do tematu, gdy dojrzeję do tego, aby operować na samych bitach zadanego stringu.

Do BASE64 masz gotowe funkcje w samym Delphi (EncdDecd).

pozdrawiam,
Przemek O.
Re: Kodowanie BASE36
#346461
Author: Jan Drawski
Date: Tue, 13 Mar 2018 15:17
19 lines
2169 bytes
> Przy 100 znakach bez spacji policzenie 36^99 nie jest prostą sprawą.

Dokładnie o to chodzi.

> Z treści autora wynika ze może użyć base64, wiec powinien tak zrobić

Nie wiadomo do czego mu to.

> jedynym racjonalnym wytłumaczeniem użycia BASE36 jest integracja z 
> zewnętrznym systemem który wypluwa w dziwnym standardzie, ale to tez 
> powinna zrobić ta druga strona.

Podał za mało informacji. Może nie ma wpływu na drugą stronę bo jeżeli 
ma to upieranie się przy Base36 jest bezsensowne, tym bardziej, że 
kosztowało go to dużo czasu.

-- 
Pozdrawiam
Janek
Re: Kodowanie BASE36
#346445
Author: Pancio
Date: Wed, 14 Mar 2018 07:14
10 lines
2906 bytes
> Nie wiadomo do czego mu to.

Kodowanie do Base36 miało mi służyć wyłącznie do jednego.
Otóż napisałem bardzo prościutki algorytm XOR do szyfrowania licencji programu na podstawie kilku danych, m.in. NIPu i REGONu firmy. Tyle, że wynikiem takiego szyfrowania jest ją różne kody ASCII, a więc sporo "krzaczków".
Całkiem po prosty chciałem to zakodować do postaci wyłącznie dużych liter i cyfr. Wydawało mi się, że najlepszym rozwiązaniem będzie właśnie Base36, ale więcej z tym zachodu niż myślałem.
Wiem, że zaraz odezwą się głosy, że szyfr XOR jest bardzo prostu do złamania i jest w tym sporo racji. Natomiast dla moich klientów, to i tak jest coś w stylu węzła gordyjskiego, a więc w zupełności wystarczalne.
Naprawdę stokrotne dzięki za pomoc, ale widząc, że to wcale nie jest taka prosta sprawa, postanowiłem przejść na standard Base64 (względnie Base32, ale tutaj też znalazłem kilka haczyków). Czyli jednak Base64.

--
Pancio
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads