vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 564: Sichere Verschlüsselung (Vernam-Algorithmus) 
Autor: JAG
 Tipp anzeigenDatum: 29.12.08 12:43

Habe mir folgenden Tipp zum Verschlüsseln mit Vernam mal angeschaut, um etwas Text zu verschlüsseln.
http://www.vbarchiv.net/tipps/details.php?id=564

Außerdem wollte ich das Ganze ohne String-Variablen d.h. nur mit TextBoxen ausführen, um den verschlüsselten
Text anzuzeigen, markieren und kopieren zu können.

Bei den Tests sind mir dann aber zwei Sachen aufgefallen, welche man noch ändern muss, damit es auch klappt.
1. Wenn man die Verschlüsselung startet und kein Passwort eingegeben hat, kommt der Laufzeitfehler 5.
2. Zur Ausgabe des verschlüsselten Textes können nur String-Variablen genommen werden, da unter
gewissen Umständen die Ausgabe in eine TextBox nicht fehlerfrei ist (sh. folgende Beschreibung).

Bei der Umsetzung mit der Vernam-Funktion, wird bei zufälliger Übereinstimmung von einzelnen Zeichen
( z.B. ein „A“ an der gleichen Stelle im Passwort und im Originaltext ) im verschlüsselten Vernam-Code ein
NULL-Zeichen ( Chr(0) ) gesetzt.
Dies ist, wenn man den kompletten Code in eine String-Variable speichert ohne Bedeutung, da dort auch das
NULL-Zeichen mit gespeichert wird.
Nimmt man jedoch anstatt der String-Variablen dazu TextBoxen, oder auch Label, zur direkten Ausgabe bzw.
danach zur weiteren Nutzung des verschlüsselten Vernam-Codes, funktioniert das Ganze nicht mehr, da das
NULL-Zeichen in einer TextBox nicht dargestellt werden kann, aber auch im Zusammenhang mit Text als
Terminator verwendet wird und hier den Text ab der Stelle des ersten NULL-Zeichens abschneidet/terminiert.
(d.h. der Rest wird nicht mehr angezeigt)
Dies passiert aber auch wenn man die String-Variable in eine TextBox schiebt z.B. Text1.Text = String-Variable.
Ein Entschlüsseln dieses TextBox-Textes ist dann nicht mehr möglich, da der Text ja nur noch teilweise vorliegt.
Am Rande sei noch erwähnt, dass die Anzeige in einer MsgBox hierbei auch nicht korrekt ist.

Nun zu den Änderungen des Codes in der Vernam-Funktion um dies abzustellen:
Als Erstes eine Abfrage ob ein Originaltext oder ein Passwort eingegeben wurde. Wenn nicht, dann „Exit Funktion“.
Dann wird bei Übereinstimmung kein NULL-Zeichen mehr gesetzt, sondern stattdessen das Zeichen, welchen an
dieser Stelle übereinstimmte.
Einen Nachteil hat diese Ausführung aber dennoch (Dies wird zwar normalerweise nie vorkommen, aber ???).
Ist das Passwort gleich dem Originaltext, ist der verschlüsselte Text ebenfalls der gleiche wie der Originaltext.
Als Beispiel folgendes:
Ist der Originaltext = „Mustertext“ und das Passwort = „Mustertext“, ist auch die Verschlüsselung = „Mustertext“.
Um das dann noch abzustellen, wurde zusätzlich noch eine Verschiebung der Zeichen im Passwort vorgenommen.

Und nun der Code der überarbeiteten Vernam-Funktion, wobei die Änderungen gegenüber dem Original-Code
„fett“ dargestellt werden.

 ' Textverschlüsselung mit VernamCode
Public Function VernamCode(sOriginal As String, _
  sPassword As String) As String
 
  ' wenn nichts angegeben, wird auch nichts ver/entschlüsselt
  If sPassword = "" Or sOriginal = "" Then Exit Function
 
  Dim i As Long
  Dim aktpos As Long
  Dim bAkt As Byte
  Dim bCode As Byte
  Dim bPassword As String
 
  VernamCode = ""
  bPassword = ""
 
  ' Passwort auf die Länge des Originals bringen
  ' Aus "Passwort" wird dann "PasswortPasswortPas....usw."
  aktpos = 1
  For i = Len(sPassword) + 1 To Len(sOriginal)
    sPassword = sPassword & Mid(sPassword, aktpos, 1)
    aktpos = aktpos + 1
    If aktpos > Len(sPassword) Then aktpos = 1
  Next i
 
  ' einzelne Zeichen des Passwortes nochmals tauschen
  aktpos = 1
  For i = 1 To Len(sPassword)
    bPassword = bPassword & Chr(Asc(Mid(sPassword, i, 1)) - aktpos)
    aktpos = aktpos + 1
    If aktpos = 29 Then aktpos = 1
  Next i
 
  ' Verschlüsselung
  For i = 1 To Len(sOriginal)
    bAkt = Asc(Mid(sOriginal, i, 1))
    bCode = Asc(Mid(bPassword, i, 1))
 
    If bAkt = bCode Then
        VernamCode = VernamCode & Chr(bAkt)
    Else
        VernamCode = VernamCode & Chr(bAkt Xor bCode)
    End If
 
  Next i
 
End Function
Damit dürfte die Vernam-Funktion dann wohl in allen Situationen einsetzbar sein.

Als Letztes dann noch der Aufruf der Vernam-Funktion nur mit TextBoxen:
Private Sub cmdVerschlüsseln_Click()
Text3.Text = VernamCode(Text1.Text, Text2.Text)
End Sub
 
 
Private Sub cmdEntschlüsseln_Click()
Text4.Text = VernamCode(Text3.Text, Text2.Text)
End Sub
Sollte es noch etwas zum Verbessern geben, bitte melden.

Euch allen noch einen guten Rutsch und ein gesundes erfolgreiches neues Jahr.

Gruß JAG

PS.
Ein kleines Testprogramm (EXE) hierzu kann ich Interessenten zusenden.
(Bin ab 01.01.2009 ca. 3 1/2 Wochen nicht erreichbar)
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tipp 564: Sichere Verschlüsselung (Vernam-Algorithmus)5.755JAG29.12.08 12:43
Sichere Verschlüsselung (Vernam-Algorithmus)2.328NiWa18.09.10 19:10
Re: Sichere Verschlüsselung (Vernam-Algorithmus)2.198ModeratorDaveS18.09.10 19:47
Re: Sichere Verschlüsselung (Vernam-Algorithmus)2.258NiWa18.09.10 20:22
Re: Sichere Verschlüsselung (Vernam-Algorithmus)2.144ModeratorDaveS18.09.10 21:31

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel