Tags: XTEA Verschlüsseln Wheeler Needham
Die XTEA Verschlüsselung von Needham/Wheeler ist eine gute (starke) Verschlüsselung, die sich leicht in jeder Programmiersprache nachbilden läßt und sich so zum sicheren Datenaustausch mit anderen Programmiersprachen eignet.
Dummerweise ist das ganze mit VB.Net nicht GANZ einfach, weil im Gegensatz zu C (Referenzimplementation) ein Fehler auftritt, wenn zwei 32 bit Werte addiert oder subtrahiert werden und das Ergebnis zu groß oder zu klein ist. Gottseidank kennt VB ja inzwischen auch 64 Bit Werte und dieser Fehler läßt sich leicht vermeiden, bzw es läßt sich das Verhalten von C simulieren.
Die unten dargestellte Implementierung stellt die BASIS für eine eigene komplette Verschlüsselungsklasse dar, weil natürlich nur die beiden Basisfunktionnen implementiert sind. Diese zu erweitern sollte aber kein Problem sein.
Fragen von ANFÄNGERN, im sinne von "wie verschlüssele ich damit eine Datei" beantworte ich ... NICHT!!!!
Die XTEA Verschlüsselung von Needham/Wheeler ist eine gute (starke) Verschlüsselung, die sich leicht in jeder Programmiersprache nachbilden läßt und sich so zum sicheren Datenaustausch mit anderen Programmiersprachen eignet.
Dummerweise ist das ganze mit VB.Net nicht GANZ einfach, weil im Gegensatz zu C (Referenzimplementation) ein Fehler auftritt, wenn zwei 32 bit Werte addiert oder subtrahiert werden und das Ergebnis zu groß oder zu klein ist. Gottseidank kennt VB ja inzwischen auch 64 Bit Werte und dieser Fehler läßt sich leicht vermeiden, bzw es läßt sich das Verhalten von C simulieren.
Die unten dargestellte Implementierung stellt die BASIS für eine eigene komplette Verschlüsselungsklasse dar, weil natürlich nur die beiden Basisfunktionnen implementiert sind. Diese zu erweitern sollte aber kein Problem sein.
Fragen von ANFÄNGERN, im sinne von "wie verschlüssele ich damit eine Datei" beantworte ich ... NICHT!!!!
VB.NET-Quellcode
- ''' <summary>
- ''' XTEA Implemetierung des XTEA Algorithmus von Wheeler/Needham
- ''' http://en.wikipedia.org/wiki/XTEA
- ''' testverktoren: http://www.freemedialibrary.com/index.php/XTEA_test_vectors
- ''' </summary>
- ''' <remarks></remarks>
- Public Class XTEA
- Private Const UpperBits64 As UInt64 = &H7FFFFFFF00000000UL ' benötigt um Überlauf bei Subtraktion zu verhindern
- Private Const LowerBits64 As UInt64 = &HFFFFFFFFUL ' Überlauf bei Addition simulieren
- Public Sub encipher(ByVal num_rounds As Integer, ByRef v() As UInt32, ByRef k() As UInt32)
- Dim v0 As UInt64 = v(0), v1 As UInt64 = v(1), sum As UInt64 = 0, delta As UInt32 = &H9E3779B9UL
- For i = 0 To num_rounds - 1
- v0 += ((((v1 << 4) And LowerBits64) Xor (v1 >> 5)) + v1) Xor (sum + k(sum And 3UL))
- v0 = v0 And LowerBits64
- sum += delta
- sum = sum And LowerBits64
- v1 += ((((v0 << 4) And LowerBits64) Xor (v0 >> 5)) + v0) Xor (sum + k((sum >> 11) And 3UL))
- v1 = v1 And LowerBits64
- Next
- v(0) = v0
- v(1) = v1
- End Sub
- Public Sub decipher(ByVal num_rounds As Integer, ByRef v() As UInt32, ByRef k() As UInt32)
- Dim v0 As Int64 = v(0), v1 As Int64 = v(1), delta As UInt32 = &H9E3779B9UL, sum As UInt64 = delta * num_rounds
- For i = 0 To num_rounds - 1
- v1 = v1 + UpperBits64
- v1 -= ((((v0 << 4) And LowerBits64) Xor (v0 >> 5)) + v0) Xor (sum + k((sum >> 11) And 3UL))
- v1 = v1 And LowerBits64
- sum = sum + UpperBits64
- sum -= delta
- sum = sum And LowerBits64
- v0 = v0 + UpperBits64
- v0 -= ((((v1 << 4) And LowerBits64) Xor (v1 >> 5)) + v1) Xor (sum + k(sum And 3UL))
- v0 = v0 And LowerBits64
- Next
- v(0) = v0
- v(1) = v1
- End Sub
- End Class
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()