Integer in zwei Integer aufteilen

Donnerstag, der 30. September 2010, 14:46 Uhr von Stefan

Aufgrund eines Beitrags zu Cookies bzw. wie man ein “evercookie” erstellen kann welches nicht so leicht gelöscht werden kann habe ich mir Gedanken darüber gemacht wie man Informationen noch verstecken kann.

Der Entwickler des “evercookie” verwendet dazu unter anderem ein Bild mit speziellen Inhalt. Im Inhalt ist somit eine ID mittels Farbwerte codiert. Wenn das Bild aus dem Browsercache geladen wird kann der Farbwert mittels Canvas (HTML5) ausgelesen werden.

Leider funktioniert dieses Canvas Objekt noch nicht in allen derzeit verwendeten Browsern.

Deswegen hab ich mir überlegt man könnte die ID vielleicht besser in der Bildgröße eines komplett weißen Bildes speichern.
Sprich: Einen Integer in zwei Integer aufteilen: Breite x Höhe

Dabei hab ich mehrere Überlegungen durchgeführt und die für mich am besten Funktionierende ausgewählt:

Versuch1: Splitte die Zahl in der Mitte

z.B: 123456 wird zu 123 456

Vorteil:
+ Sehr einfach und schnell

Nachteile:
– Probleme bei Zahlen mit 0: 123000
– Redundanzen: 12 3456 ist das gleiche wie 123 456 oder 1234 56 -> zu viele mögliche Codierungen für eine Zahl.

Versuch 2: Multiplikation

z.B.: 23 x 100 = 2300 oder 167 x 2 = 234

Vorteile:
+ Einfach zu verstehen

Nachteile:
– Sehr viele redundante Möglichkeiten z.B. 167 x 2 = 234 oder 234 x 1 = 234
– Zerlegung nicht trivial
– Primzahlen müssen immer mit 1 x prim erzeugt werden.

Versuch 3: Jede Dimension einer Zahl zuordnen

1 3 7 13
2 4 8 14
5 6 9 15
10 11 12 16

Vorteile:
+ Effiziente nach oben hin offene Codierung
+ keine Redundanzen

Nachteile:
– Kompliziertere Berechnung

- Berechnungsbeispiel 1:
Breite: 4, Höhe: 2 (Also die Zahl 14 in der Tabelle oben)

Wähle die größere Zahl der beiden aus und subtrahiere 1. Dann Quadriere sie um das innere Quadrat zu berechnen:
4-1 = 3 -> 3 x 3 = 9 -> Größe des Inneren Quadrats

Jetzt gibt es zwei Fälle:
Fall1 : Breiter als Höher: Größe des Inneren Quadrats + Breite – 1 + Höhe
Fall2: Höher als Breiter: Größe des Inneren Quadrats + Breite

Es tritt Fall1 ein:
9 + 4 -1 + 2 = 14

– Berechnungsbeispiel 2:
Breite: 2, Höhe: 4 (= 11)

4-1 = 3 -> 3 x 3 = 9
Fall2: 9 + 2 = 11

– Berechnungsbeispiel 3 (Spezialfall)
Breite: 4, Höhe:4 (=16)

Wenn Breite == Höhe dann einfach:
4 * 4 = 16

PHP Codebeispiel: http://www.shofer.at/evercookie/split.phps

Javascript Codebeispiel: http://www.shofer.at/evercookie/split.js

Geschrieben in: Programmierung | Schlagwörter: ,
0 Trackbacks | Keine Kommentare »

Einen Kommentar abgeben

Bitte beachten Sie: Die Kommentare werden moderiert. Dies kann Ihren Kommentar verzögern. Es besteht aber kein Grund, ihn nochmal abzuschicken.

*