PDF 941kB - Hochschule Ulm
PDF 941kB - Hochschule Ulm
PDF 941kB - Hochschule Ulm
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Implementierung<br />
Aes<br />
- passwordSalt : byte[]<br />
- secretKey : byte[]<br />
+ Aes(byte[])<br />
+ Decrypt(byte[]) : byte[]<br />
+ Encrypt(byte[]) : byte[]<br />
Abbildung 31: Klassendiagramm der Klasse Aes.<br />
Wie zu erkennen ist, beschränkt sich die Klasse auf zwei wesentliche Methoden:<br />
Encrypt() und Decrypt(), die die Daten mit dem an den Konstruktor übergebenen<br />
geheimen Schlüssel verschlüsseln bzw. entschlüsseln. Dem Konstruktor wird ein Byte-<br />
Array als geheimer Schlüssel übergeben, wie in Listing 19 zu sehen ist.<br />
1 public Aes ( byte [] secretKey )<br />
2 {<br />
3 this . secretKey = secretKey ;<br />
4 string temp = null ;<br />
5<br />
6 for ( int i = 0; i < this . secretKey . Length ; i += 3)<br />
7 {<br />
8 temp += this . secretKey [i];<br />
9 }<br />
10<br />
11 this . passwordSalt = Encoding . UTF8 . GetBytes ( temp );<br />
12 }<br />
Listing 19: Konstruktor der Klasse Aes.<br />
Der geheime Schlüssel wird der Klassenvariable secretKey zugewiesen. Aus dem secretKey<br />
wird dann ein Salt gebildet, indem jede dritte Stelle des Byte-Arrays beginnend<br />
mit der Position 0 einem string hinzugefügt wird. Anschließend wird dieser string der<br />
GetBytes() Methode aus dem .NET Framework Namespace System.Text.Encoding.<br />
UTF8 übergeben und der Rückgabewert der Klassenvariable passwordSalt zugewiesen.<br />
Mit der Encrypt() Methode wird ein übergebenes Byte-Array mithilfe der Variable<br />
secretKey und passwordSalt verschlüsselt, wie in Listing 20 zu sehen ist.<br />
1 public byte [] Encrypt ( byte [] message )<br />
2 {<br />
3 using ( AesManaged aes = new AesManaged ())<br />
4 {<br />
5 Rfc2898DeriveBytes deriveBytes = new<br />
Rfc2898DeriveBytes ( secretKey ,<br />
passwordSalt , 1000) ;<br />
6 aes . Key = deriveBytes . GetBytes ( aes . KeySize /<br />
8);<br />
62