Ako šifrovať ID objektov/údaje rubrika: Programování: PHP
Zdravím,
ak riešite šifrovanie ID, identifikátor záznamu tak ako presne ?
https://github.com/ivanakimov/hashids.php alebo https://github.com/KevBurnsJr/pseudocrypt alebo niečo ine ?
V DB ukladať ID záznamu alebo len výsledný string(šifrované ID) ?
moje požiadavky by boli:
- možnosť spätne zistiť o aké ID/aký údaj sa jednalo
- výsledný string jedinečný min. na miliardu záznamov
- výsledná string má iba znaky 2-9, A-Z bez (I, L, O)
- dlžka stringu ideálne 6-10 znakov
- na šifrovanie sa použije jedinečný vygenerovaný public string
- na dešifrovanie sa použije jedinečný vygenerovaný private string
prípadne to isté - ako šifrovať ale kombináciu údajov (údaj 1 = 1-2 znaky, údaj 2 = 1-5 znakov, údaj 3 = 6-10 znakov) .. celková dlžka údajov je cca 8-17 znakov
EDIT:
Dôvod prečo to robiť takto je mať univerzálny identifikátor, ktorý bude obsahovať min. identifikátor databázy a id objektu.
Ďalší dôvod prečo to tak chcem je, aby bolo možné zašifrovať určité údaje, ktoré by som následne vedel offline odšifrovať a skontrolovať. Tento výsledný string má byť teda čo najkratší.
Príklad č. 1: id klienta = 1469, id objektu = 486783599 -> zašifrujem a výsledny string bude napr. 2e3r6t4w ... spätne to viem odšifrovať a zistiť pôvodne údaje.
Príklad č. 2: poradové číslo = 44, číslo vstupenky = 674935985, id predstavenia = 67936 -> zašifrujem a výsledny string bude napr. 9t8k3q4 .. spätne to viem offline odšifrovať a overiť keďže poznám dešifrovací kľúč
Možné riešenie pre príklad č.1:
a, hashids
b, výsledný string niečo ako $A$BO$C, kde $A = dvojpísmenkový identifikátor objektu/tabuľky, $B = base31(ID objektu), O = separátor, $C = base31(ID klienta)
base31 preto, lebo výsledná abeceda znakov bude obsahovať iba veľké písmena (bez ILO) a čísla (bez 0,1,2)
- spoločná šifra pre všetkých klientov bude náhodné poradie 31 písmen (použitá abeceda znakov)
Poloz si otazku, ci ma vobec zmysel hashovat/sifrovat ID (hovorim o umelom ID).
Aj pri sifrovanom vies spetne zistit väzby, lebo musi byt vsade sifrovany rovnako, tak aku pridanu hodnotu ma?
Ak nechces aby si mal predikovatelne ID-cka, pouzi GUID-y.
Komentáře
- pooler : GUID je na to príliš dlhý a obsahuje aj znaky, ktoré nechcem aby tam boli. Dôvod prečo to robiť takto je mať univerzálny identifikátor, ktorý bude obsahovať min. identifikátor databázy a id objektu. Ďalší dôvod prečo to tak chcem je, aby bolo možné zašifrovať určité údaje, ktoré by som následne vedel offline odšifrovať a skontrolovať. Tento výsledný string má byť teda čo najkratší. — 2.8.2017
- harrison314 : Napis konkretny Use case, pretoze co ma ID cpolcne zo zafrovanymi datami? — 2.8.2017
- harrison314 : Mozes tie ID-cka generovat "rucne" napriklad z SHA-2* mozes zobrat lubovlnych X bitov a pouzit ich na transformaciu do vlastneho ID-cka len s povlenych znakov. — 2.8.2017
- pooler : Príklad č. 1: id klienta = 1469, id objektu = 486783599 -> zašifrujem a výsledny string bude napr. 2e3r6t4w ... spätne to viem odšifrovať a zistiť pôvodne údaje. Príklad č. 2: poradové číslo = 44, číslo vstupenky = 674935985, id predstavenia = 67936 -> zašifrujem a výsledny string bude napr. 9t8k3q4 .. spätne to viem offline odšifrovať a overiť keďže poznám dešifrovací kľúč — 2.8.2017
- harrison314 : Ak chces mat data nozaj chranene proti zmene tak by som nesaskoval a pouzil hmac-sha256, akekolvek tvoje vlastne riesenie bude ovela nachilnejsie na prelomenie ak sa ti dostanu ku kodu. — 2.8.2017
- pooler : chránené to bude, keďže na šifrovanie/odšifrovanie budem používať ďalšie stringy (public/private) — 2.8.2017
- harrison314 : Tak potm chces zneuzivat ID na nieco na co by pouzite byt nemalo. — 2.8.2017
- pooler : asi sa nejako nechápeme — 2.8.2017
- harrison314 : Podla toho co si doplnil (konecne use case), tak by uplne malo stacit to, ze cloveku das na vstupenku vsteky potrebne informacie, a kod vstupenky, co by bol nejaky hash ID predsatvenia, ID vstupenky, ID brany a shared secret (ktory si vemenis s poskytovetlom bezpecnym kanalom pri inicilizacii, respektyve vytvarni predsatvenia). To na overnie cloveka staci. — 4.8.2017
Pro zobrazení všech 7 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře