vernam verschlüsselung

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

      vernam verschlüsselung

      hallo,

      im forum wurde nach der vernam verschlüsselung gefragt.
      beschreibung

      auf basis dieses artikels habe ich ein kleines beispielprogramm erstellt.
      sie benötigen dafür zwei button und drei textboxen

      VB.NET-Quellcode

      1. Public Class Form1
      2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      3. Me.Button1.Text = "verschlüsseln"
      4. Me.Button2.Text = "entschlüsseln"
      5. End Sub
      6. Private Function verentschluesseln(ByVal orig As String, ByVal key As String)
      7. Dim ret As String = ""
      8. For i As Integer = 0 To orig.Length - 1
      9. Dim o As String = orig.Substring(i, 1)
      10. Dim k As String = key.Substring(i, 1)
      11. ret &= Convert.ToChar(Asc(o) Xor Asc(k))
      12. Next
      13. Return ret
      14. End Function
      15. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      16. Me.textverschluesselt.Text = verentschluesseln(Me.textoriginal.Text, Me.textkey.Text)
      17. Me.textoriginal.Text = ""
      18. End Sub
      19. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      20. Me.textoriginal.Text = verentschluesseln(Me.textverschluesselt.Text, Me.textkey.Text)
      21. End Sub
      22. End Class

      ich bin kein experte in sachen textverschlüsselung.

      EDIT: korrekturen im code (26.April.2008)

      gruss

      mikeb69

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „mikeb69“ ()

      hi mike

      wow herzlichen Dank

      Das ist genau das was ich gesucht habe und jetzt muß ich noch was erweitern ......

      Aber vielen dank - echt nett von dir mir den code zu posten

      Klingt vielleicht etwas unverschähmt jetzt von mir aber wie könnte ich Anfangen wenn ich eine Bildschirmtastatur programieren will für einen Touchscreen?

      Chris
      So ich spiele jetzt den leichenschänder aber ich will keinen neuen Thread auf machen :)
      Im Forum wurde der Quellcode wieder gebraucht also habe ich ihn so umgeschrieben das er wieder Funktioniert :)
      Alte Funktion :
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Private Function verentschluesseln(ByVal orig As String, ByVal key As String) As String
      2. Dim ret As String = String.Empty
      3. For i = 0 To orig.Length - 1
      4. Dim p As Char
      5. If key.Length - 1 > i + 1 Then p = key.Substring(i, 1)(0)
      6. ret &= Convert.ToChar(Convert.ToInt32(orig.Substring(i, 1)(0)) Xor Convert.ToInt32(p))
      7. Next
      8. Return ret
      9. End Function

      [EDIT]
      Danke ~blaze~ :D hat wohl einen Logischen Fail drin :)
      Neue Funktion :

      VB.NET-Quellcode

      1. Private Function verentschluesseln(ByVal orig As String, ByVal key As String) As String
      2. Dim ret As String = String.Empty
      3. For i = 0 To orig.Length - 1
      4. Dim p As Char
      5. If key.Length - 1 > i + 1 Then p = key(i)
      6. ret &= Convert.ToChar(Convert.ToInt32(orig(i)) Xor Convert.ToInt32(p))
      7. Next
      8. Return ret
      9. End Function


      viel spaß damit :)
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise

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

      Hi
      sieht aber etwas sehr unschön aus, auch das mit dem String. Außerdem kann bei a Xor b = 0 rauskommen und der String wäre terminiert. Statt Strings verwendet man außerdem für sowas Byte-Arrays oder Streams:

      VB.NET-Quellcode

      1. Shared Function VernamChiffre(input As Char(), key As Byte()) As Char()
      2. If input Is Nothing Then Throw New ArgumentNullException("input")
      3. If key Is Nothing Then Throw New ArgumentNullException("key")
      4. Return System.Text.Encoding.Unicode.GetChars(VernamChiffre(System.Text.Encoding.Unicode.GetBytes(input), key))
      5. End Function
      6. Shared Function VernamChiffre(input As Byte(), key As Byte()) As Byte()
      7. If input Is Nothing Then Throw New ArgumentNullException("input")
      8. If key Is Nothing Then Throw New ArgumentNullException("key")
      9. Using outp As New System.IO.MemoryStream(input.Length), _
      10. inp As New System.IO.MemoryStream(input)
      11. VernamChiffre(inp, key, outp)
      12. Return outp.GetBuffer()
      13. End Using
      14. End Function
      15. Shared Sub VernamChiffre(input As IO.Stream, key As Byte(), output As IO.Stream)
      16. If input Is Nothing Then Throw New ArgumentNullException("input")
      17. If output Is Nothing Then Throw New ArgumentNullException("output")
      18. If key Is Nothing Then Throw New ArgumentNullException("key")
      19. If key.Length = 0 Then Throw New ArgumentException("Expected at least one byte as key size.", "key")
      20. Dim buffer(key.Length - 1) As Byte
      21. Dim len As Integer
      22. Do
      23. len = input.Read(buffer, 0, buffer.Length)
      24. For i As Integer = 0 To len - 1
      25. buffer(i) = buffer(i) Xor key(i)
      26. Next
      27. output.Write(buffer, 0, len)
      28. Loop Until len = 0
      29. End Sub

      Wozu braucht man überhaupt das Substring? key.Substring(i, 1)(0) entspricht key(i). Statt dem String würde man außerdem eh einen StringBuilder verwenden, das ist so ja extrem teuer.

      Gruß
      ~blaze~