Verschlüsseln mit XTEA

    • VB.NET

      Verschlüsseln mit XTEA

      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!!!!

      VB.NET-Quellcode

      1. ''' <summary>
      2. ''' XTEA Implemetierung des XTEA Algorithmus von Wheeler/Needham
      3. ''' http://en.wikipedia.org/wiki/XTEA
      4. ''' testverktoren: http://www.freemedialibrary.com/index.php/XTEA_test_vectors
      5. ''' </summary>
      6. ''' <remarks></remarks>
      7. Public Class XTEA
      8. Private Const UpperBits64 As UInt64 = &H7FFFFFFF00000000UL ' benötigt um Überlauf bei Subtraktion zu verhindern
      9. Private Const LowerBits64 As UInt64 = &HFFFFFFFFUL ' Überlauf bei Addition simulieren
      10. Public Sub encipher(ByVal num_rounds As Integer, ByRef v() As UInt32, ByRef k() As UInt32)
      11. Dim v0 As UInt64 = v(0), v1 As UInt64 = v(1), sum As UInt64 = 0, delta As UInt32 = &H9E3779B9UL
      12. For i = 0 To num_rounds - 1
      13. v0 += ((((v1 << 4) And LowerBits64) Xor (v1 >> 5)) + v1) Xor (sum + k(sum And 3UL))
      14. v0 = v0 And LowerBits64
      15. sum += delta
      16. sum = sum And LowerBits64
      17. v1 += ((((v0 << 4) And LowerBits64) Xor (v0 >> 5)) + v0) Xor (sum + k((sum >> 11) And 3UL))
      18. v1 = v1 And LowerBits64
      19. Next
      20. v(0) = v0
      21. v(1) = v1
      22. End Sub
      23. Public Sub decipher(ByVal num_rounds As Integer, ByRef v() As UInt32, ByRef k() As UInt32)
      24. Dim v0 As Int64 = v(0), v1 As Int64 = v(1), delta As UInt32 = &H9E3779B9UL, sum As UInt64 = delta * num_rounds
      25. For i = 0 To num_rounds - 1
      26. v1 = v1 + UpperBits64
      27. v1 -= ((((v0 << 4) And LowerBits64) Xor (v0 >> 5)) + v0) Xor (sum + k((sum >> 11) And 3UL))
      28. v1 = v1 And LowerBits64
      29. sum = sum + UpperBits64
      30. sum -= delta
      31. sum = sum And LowerBits64
      32. v0 = v0 + UpperBits64
      33. v0 -= ((((v1 << 4) And LowerBits64) Xor (v1 >> 5)) + v1) Xor (sum + k(sum And 3UL))
      34. v0 = v0 And LowerBits64
      35. Next
      36. v(0) = v0
      37. v(1) = v1
      38. End Sub
      39. End Class

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()