06. januar 2012 - 16:21Der er
12 kommentarer og 1 løsning
Krypter/dekrypter tal, til fast længde streng
Jeg har brug for at kunne kryptere/dekryptere en række fortløbende tal, men resultatet skal have samme længde og være alphanumerisk. (0-9, A-Z) (case insensitive)
kilde-tallet vil være mellem 1 og 2.147.483.647, startende med 1, 2, 3 osv. Hvis max-værdien er lavere kan det også gå, dog ikke lavere end 729.000.000 - det er ok hvis det gør opgaven lettere.
eksempel: tallet 333 krypteres til 4f6u8dd strengen 4f6u8dd dekrypteres til 333
resultat-strengen skal helst være mellem 6 og 8 karakterer lang, men skal være samme længde hver gang. Jo kortere jo bedre.
Det skal helst også være sådan at resultat-strengene ikke ligner hinanden for meget - hvis fx 333 bliver til 4f6u8dd, så bør 334 og 335 ikke blive til 4f6u8de og 4f6u8df fordi det vil gøre det for let at kunne fake en værdi på den måde.
Eftersom det skal kunne dekrypteres, må der ikke være noget data-tab i processen, så fx at SHA1 eller MD5 hash'e det, og tage de sidste 6 karakterer dur ikke, fordi det ikke vil kunne dekrypteres, og det vil ikke nødvendigvis være unikt.
Målet er ud fra et database-id at kunne generere en unik kode, der kan dekrypteres og resultere i det oprindelige id.
Må jeg vende dit problem om, og foreslå et ekstra felt i din tabel, ved siden af dit id. Det indeholder så dine 6-8 tegn, evt genereret ud fra en hash-funktion, og bruges til opslag.
@Erik: Det kan jeg desværre ikke bruge, det er vigtigt at resultat-strengen er unik i forhold til de andre der kan genereres. Derfor går en hash ikke, da det ikke er unikt hvis jeg fx tager de sidste 6 karakterer fra en hash-værdi på 32 karakterer. Der kan sagtens være mange gengangere på den måde.
Der kan være gengangere, ja, men du gør feltet unikt, og genererer en ny hvis der er fejl ved indsættelse.
Synes godt om
Slettet bruger
06. januar 2012 - 21:06#7
Hvad er formålet med krypteringen/dekrypteringen (hvad vil du beskytte dig imod)? Og hvorfor skal krypteringen begrænses til max 8 tegn (og er det kun tilladt at bruge a-z og 0-9)? Har du behov for at kunne dekryptere tallet, eller skal det bare bruges til at sammenligne et ukrypteret id med et krypteret?
Efter at have overvejet problem naermere vil jeg konkludere at enhver algoritme hvor krypteringen af et enkelt id ikke er uafhaengigt af andre id'er ikke duer - hvis man sletter en raekke goer man et antal raekker ulaeselige - og det er ikke godt design ikke at hav emulighed for at slette raekker (ogsaa selvom det i de fleste tilfaelde er bedre med et deleted flag).
Det udlukker stort set alle respektable krypterings algoritmer.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.