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 QuadratsJetzt 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 + BreiteEs 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: Internet, Programmierung
0 Trackbacks | Keine Kommentare »