PDF 941kB - Hochschule Ulm
PDF 941kB - Hochschule Ulm
PDF 941kB - Hochschule Ulm
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