05. december 2007 - 12:46Der er
5 kommentarer og 1 løsning
kryptering light
Hej, Jeg har en lille mængde data som jeg skal have sendt fra en database til en anden, hvor det fylder så lidt som muligt - målt i antal tegn.
Helt specifikt har jeg 150 begivenheder med alle kombinationsmuligheder som skal registreres. Det kan helt enkelt gøres med et binært system. Men det vil kræve 150 tegn at angive om de 150 begivenheder er aktive eller ej.
Jeg har tænkt i en løsning der hedder, hvor man deler op som her: 4 begivenheder kan beskrives med 1 tegn på følgende måde:
Det giver i alt 16 mulige løsninger (4! / 2 +4) = 16
Da jeg for hvert tegn har 1 byte svarende til 256 muligheder. Tænker jeg at man må kunne komprimere 150 begivenheder i alle tænkelig kombinationsmuligheder på en smart måde.
Min egen løsning vil kunne beskrive 150 begivenheder i alle kombinationer på 30 tegn. (150 / 5) Forstået at man kan forklare 5 begivenheder pr tegn.
Men da der 256 muligheder i et felt og jeg med ovenstående kun bruger (5*4*3*2*1/2)+4 = 64 af dem, går resten vel til spilde. Så jeg tænker at der findes en smart måde at udnyttet hver enkelt byte så jeg kan beskrive de 150 begivenheders kombinationer på mindre en 30 tegn.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Den mest pladsbesparende løsning er at anvende REELT binær data, og ikke en streng af 1'er og 0'er - brug bitvise operationer (shifting, OR) for at danne byte-værdeier
Jeg kender ikke dit programmeringssprog (du har ikke angivet et), så det er svært at være meget mere specifik, men her har du noget pseudokode til generering af strengen:
Del op i grupper á 8 begivenheder For hver gruppe: Sæt en variabel b til 0 For hver begivenhed i gruppe: Sæt b = b ShiftLeft 1 Hvis begivenhed = 1 (sand), så b = b or 1 Hvis gruppe har færre end 8 begivenheder, sæt b = b ShiftLeft (8 - AntalBegivenhederIGruppe) Tilføj byte til streng Indsæt byte i database (husk brug af escaping, parameters, etc. for at undgå fejl hvis der har sneget sig en apostrof eller andet ugyldigt tegn ind)
Når du siger "ASCII-tekst", mener du så noget der kan læses af mennesker, eller bare noget der kan proppes i en string? Hvis det første, så brug Base64-encoding af resultatet (6 begivenheder pr. tegn, altså 25 tegn).
Den mest pladsbesparende får du kun ved at opbygge bytes (du skal vist gennem char, men kan ikke huske om du kan bruge den direkte, eller om det skal være som et typecast el. lign.) og så tilføje bytesene en ad gangen til en string. Shifting skulle vist være << og OR |, men det er længe siden jeg har arbejdet med Java, og ved ikke om der er særlige ting man skal vide med J2ME.
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.