13.01.2014 Aufrufe

PDF 941kB - Hochschule Ulm

PDF 941kB - Hochschule Ulm

PDF 941kB - Hochschule Ulm

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Implementierung<br />

7 aes .IV = deriveBytes . GetBytes ( aes . BlockSize<br />

/ 8);<br />

8<br />

9 using ( MemoryStream ms = new MemoryStream ())<br />

10 {<br />

11 using ( CryptoStream cs = new<br />

CryptoStream (ms , aes .<br />

CreateEncryptor () ,<br />

CryptoStreamMode . Write ))<br />

12 {<br />

13 cs. Write ( message , 0, message<br />

. Length );<br />

14 }<br />

15<br />

16 return ms. ToArray ();<br />

17 }<br />

18 }<br />

19 }<br />

Listing 20: Verschlüsseln der Daten mit der Encrypt() Methode.<br />

Zunächst wird eine Instanz der Klasse AesManaged erzeugt. Mithilfe der Instanz der<br />

Klasse Rfc2898DeriveBytes ist es möglich aus einem geheimen Schlüssel, einem Salt<br />

und einer Iterationsanzahl einen Hash zu erzeugen. Anschließend werden aus dem Objekt<br />

der Klasse Rfc2898DervieBytes mit der Methode GetBytes() der Key und IV<br />

Property der Instanz der Klasse AesManaged ein neuer Wert zugewiesen. Dadurch, dass<br />

der Property IV ein Wert zugewiesen wird, arbeitet die Klasse im Cipher-block chaining<br />

(CBC) Modus. Als nächstes wird ein Objekt vom Typ MemoryStream mit dem<br />

Variablennamen ms und ein Objekt vom Typ CryptoStream mit dem Variablennamen<br />

cs erzeugt. Im Konstruktor der Klasse CryptoStream wird das Objekt ms als Zieldatenstream<br />

angegeben und mit der Methode CreateEncryptor() des Objekts aes die Logik<br />

zum Verschlüsseln der Daten übergeben. Anschließend wird die Übergebene Variable<br />

message mithilfe der Methode Write() des Objekts cs in das Objekt ms geschrieben.<br />

Danach wird die Byte-Array Repräsentation des Objekts ms zurückgegeben.<br />

Die Funktionsweise der Decrypt() Methode ist nahezu identisch zu der Funktionsweise<br />

der Encrypt() Methode. Der Unterschied ist jedoch, dass statt der CreateEncryptor()<br />

Methode die CreateDecryptor() Methode, die die Logik zum Entschlüsseln der Daten<br />

enthält, aufgerufen wird. In Listing 21 wird der Unterschied gezeigt.<br />

1 public byte [] Decrypt ( byte [] encryptedMessage )<br />

2 {<br />

3 using ( AesManaged aes = new AesManaged ())<br />

4 {<br />

5 Rfc2898DeriveBytes deriveBytes = new<br />

Rfc2898DeriveBytes ( secretKey ,<br />

63

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!