Z ciekawości: jak generowane są numery seryjne? Podpowiedzi, Algorytmy? [zamknięte]

Zastanawiam się jak działają Generatory numerów seryjnych i walidator. Moim celem byłoby wygenerowanie numeru seryjnego z pięciu części składających się tylko z cyfr i liter.

Lubię kodowanie jako hobby i nie nazwałbym siebie profesjonalnym programistą. Jednak jestem bardzo zainteresowany tym, jak te ciekawe funkcje działają technicznie, aby poszerzyć mój umysł.

Wszelkie wskazówki, doświadczenia lub napisane algorytmy są doceniane.

Author: dsolimano, 2009-04-03

7 answers

Brandon Staggs napisał dobry artykuł na temat implementacji częściowego systemu weryfikacji numeru seryjnego. Przykłady są napisane w Delphi, ale mogą być konwertowane na inne języki.

 25
Author: stukelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 19:44:15

Cóż, tradycyjnie numery seryjne są seryjne ... liczby. Tak więc pierwszy przykład z linii produkcyjnej ma sn 0001, a następny to 0002, a następny to 0003. Myślę, że większość ludzi może wypracować ten algorytm.

Myślę, że pytasz o klucze produktów, które używają podobnego mechanizmu do podpisywania wiadomości klucza publicznego - klucz produktu jest zaszyfrowaną wartością, program ma klucz publiczny, który pozwala mu zweryfikować, czy klucz jest ważny, ale tylko oprogramowanie sprzedawca ma tajny klucz do "podpisania" klucza produktu. Artykuł Wikipedii na temat podpisów cyfrowych ma ogólny mechanizm; jedynym zastrzeżeniem jest to, że aby klucz został wprowadzony przez użytkownika, musi być nieco krótszy niż PGP.

Jeśli ograniczasz się do bardzo krótkiego numeru seryjnego, to jest mało prawdopodobne, aby był wystarczająco duży, aby zapisać wynik typowego mechanizmu podpisywania, w którym to przypadku dość często używa się po prostu jakiegoś wariantu sumy kontrolnej. To ma wadę łatwość inżynierii wstecznej-jej bezpieczeństwo wynika z tego, że algorytm jest "tajny", a nie ze względu na jakiekolwiek właściwości kryptograficzne. Każdy produkt będzie miał swój własny algorytm i zwykle dość szybko pękają.

Jeśli masz 5 bloków po 5 znaków, masz kombinacje 36^25, które są większe niż 2^128, więc można użyć jednego ze standardowych algorytmów podpisu cyfrowego, który generuje bit 128, a następnie przekonwertować tę wartość do bazy 36.

 16
Author: Pete Kirkham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 19:35:37

Znajdź sobie parę kluczy publicznych / prywatnych . Generowanie liczb sekwencyjnych (10000, 20000, 30000, 40000, ....), które mają pewną charakterystykę identyfikacyjną (np. podzielną przez 10000). Zaszyfruj ten numer za pomocą klucza prywatnego. Kodować tę wartość za pomocą jakiegoś systemu czytelnego dla człowieka (base 32 lub 64) i podzielić wartości na grupy, aby ułatwić ludziom analizowanie. Rozpowszechniaj zakodowany numer seryjny przy każdej sprzedaży Twojej aplikacji.

Gdzieś w app, masz ukryty klucz publiczny. Gdy użytkownik wprowadza zakodowany numer seryjny, najpierw dekoduj go z powrotem do pliku binarnego. Użyj klucza publicznego, aby go odszyfrować. Sprawdź, czy jest podzielna przez 10000.

Najtrudniejszą częścią jest implementacja - ukrywanie klucza publicznego w aplikacji, aby nie można go łatwo wymienić. Wybór pewnej sekwencji, którą można łatwo zidentyfikować, ale nie zabraknie wartości. zaciemnianie aplikacji, aby ktoś nie mógł łatwo ominąć całego czeku. itd...

 15
Author: Eclipse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 19:30:37

Możesz użyć generatora liczb losowych i zapisać wyniki w bazie danych. W przypadku żądania aktywacji wystarczy sprawdzić, czy serial jest w bazie danych i oznaczyć serial jako "używany".

Oczywiście wymaga to połączenia z Internetem, ale jest dobre przeciwko metodzie "kup raz, użyj wiele, wiele razy" i w przypadku połączenia z Pomocą techniczną można ponownie aktywować ten serial w celu kolejnej reinstalacji.

Późniejsza edycja: musisz również użyć do weryfikacji Internetu zaszyfrowanego i uwierzytelnionego połączenie, takie jak HTTPS.

 3
Author: adrians,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 19:43:01

GUID ("globalnie unikalny identyfikator") może być łatwym sposobem rozwiązania tego problemu:

Http://en.wikipedia.org/wiki/Globally_Unique_Identifier

GUID zawierają 16 bajtów i są najczęściej zapisywane w tekście jako ciąg cyfr szesnastkowych, takich jak:

3F2504E0-4F89-11D3-9A0C-0305E82C3301

I większość języków programowania powinna być w stanie wygenerować GUID za pomocą jednej z dostępnych bibliotek.

 3
Author: mjn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 21:25:47

Korzystając z mojego Google-Foo, wymyśliłem ten artykuł:

Http://www.mactech.com/articles/mactech/Vol.13/13.02/SerialNumberGenerator/index.html

 1
Author: Gavin Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 19:13:04
 0
Author: ʞɔıu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 19:17:51