15.10.2012 Views

Actionscript 3 Entwicklerhandbuch

Actionscript 3 Entwicklerhandbuch

Actionscript 3 Entwicklerhandbuch

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ACTIONSCRIPT 3.0 ENTWICKLERHANDBUCH<br />

Arbeiten mit lokalen SQL-Datenbanken in AIR<br />

Wenn die Anwendung die getEncryptionKey()-Methode zum ersten Mal aufruft, erstellt der Code einen zufälligen<br />

256-Bit-Salt-Wert. Danach lädt der Code den Salt-Wert aus dem verschlüsselten lokalen Speicher.<br />

Der Salt-Wert wird in einer Variablen mit dem Namen salt gespeichert. Der Code bestimmt, ob bereits ein Salt<br />

erstellt wurde, indem versucht wird, den Salt-Wert aus dem verschlüsselten lokalen Speicher zu laden:<br />

var salt:ByteArray = EncryptedLocalStore.getItem(saltKey);<br />

if (salt == null)<br />

{<br />

salt = makeSalt();<br />

EncryptedLocalStore.setItem(saltKey, salt);<br />

}<br />

Wenn der Code einen neuen Salt-Wert erstellt, generiert die makeSalt()-Methode einen zufälligen 256-Bit-Wert. Da<br />

der Wert zum Schluss im verschlüsselten lokalen Speicher gespeichert wird, wird er als ByteArray generiert. Die<br />

makeSalt()-Methode verwendet die Math.random()-Methode, um den zufälligen Wert zu generieren. Die<br />

Math.random()-Methode kann 256 Bits nicht in einem Schritt generieren. Stattdessen verwendet der Code eine<br />

Schleife, um Math.random() acht Mal aufzurufen. Jedes Mal wird ein zufälliger uint-Wert zwischen 0 und<br />

4294967295 (der höchste uint-Wert) generiert. Ein uint-Wert wird verwendet, weil uint genau 32 Bits verwendet.<br />

Indem acht uint-Werte in das ByteArray geschrieben werden, wird ein 256-Bit-Wert generiert. Folgendes ist der Code<br />

für die makeSalt()-Methode:<br />

private function makeSalt():ByteArray<br />

{<br />

var result:ByteArray = new ByteArray;<br />

}<br />

for (var i:uint = 0; i < 8; i++)<br />

{<br />

result.writeUnsignedInt(Math.round(Math.random() * uint.MAX_VALUE));<br />

}<br />

return result;<br />

Wenn der Code das Salt im verschlüsselten lokalen Speicher (Encrypted Local Store, ELS) speichert oder das Salt aus<br />

dem ELS abruft, benötigt er einen Stringschlüssel, unter dem das Salt gespeichert ist. Ohne Kenntnis des Schlüssels<br />

kann der Salt-Wert nicht abgerufen werden. In diesem Fall kann der Verschlüsselungsschlüssel nicht erstellt werden,<br />

um die Datenbank erneut zu öffnen. Standardmäßig verwendet die EncryptionKeyGenerator-Klasse einen<br />

vordefinierten ELS-Schlüssel, der in der Konstante SALT_ELS_KEY definiert ist. Anstatt den Standardschlüssel zu<br />

verwenden, kann der Anwendungscode auch einen ELS-Schlüssel angeben, der im Aufruf der getEncryptionKey()-<br />

Methode verwendet wird. Unabhängig davon, ob der Standardschlüssel oder ein von der Anwendung angegebener<br />

Salt-ELS-Schlüssel verwendet wird, wird der Schlüssel in einer Variablen mit dem Namen saltKey gespeichert. Diese<br />

Variable wird in den Aufrufen von EncryptedLocalStore.setItem() und EncryptedLocalStore.getItem()<br />

verwendet, wie bereit gezeigt.<br />

Kombinieren des 256-Bit-Kennworts und des Salt-Werts mit dem XOR-Operator<br />

Adobe AIR 1.5 und höher<br />

Der Code verfügt nun über ein 256-Bit-Kennwort und einen 256-Bit-Salt-Wert. Als Nächstes wird eine XOR-<br />

Operation verwendet, um den Salt-Wert und das verlängerte Kennwort zu einem einzelnen Wert zu verbinden. Auf<br />

diese Weise wird im Endeffekt ein 256-Bit-Kennwort erstellt, das aus Zeichen besteht, die dem gesamten Bereich<br />

zulässiger Zeichen entnommen sind. Dies gilt, obwohl die eigentliche Kennworteingabe höchstwahrscheinlich<br />

hauptsächlich aus alphanumerischen Zeichen besteht. Mit dieser erhöhten Zufälligkeit wird die Gruppe der möglichen<br />

Kennwörter sehr viel größer, ohne dass der Benutzer ein langes, komplexes Kennwort eingeben muss.<br />

Letzte Aktualisierung 27.6.2012<br />

818

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!