Visual Basic 2008 Verschlüsselung - Sicherheit?

03/18/2012 14:27 Salatgurke2011#1
Guten Tag,

ich arbeite zur Zeit an einer Methode eine sichere Passwortabfrage zu erstellen.
Ich habe mir dann folgendes überlegt:

Ein Zahlencode ist gespeichert. In das Textfeld gibt man das Passwort ein, z.B. Haus und dann wird jeder Buchstabe verschlüsselt, also a= 1, b=2 usw. nur halt nicht mit 1,2,3 usw. :P

Soweit so gut funktioniert es auch. Ich lade beim Klick auf Login jedes Zeichen in eine Variable und lasse es dann durch eine funktion umformen. Der umgeforme Wert kommt in eine neue Variable. Insgesamt also 20Variablen für die Eingabe und das umgeformte.
Am Ende wird dann alles in einer Variable zusammengetragen, also Variable eingegebenespasswort = umgeformtes zeichen 1, umgeformtes zeichen 2 usw...

Diese Variable, in der alles zusammengetragen ist, wird dann mit der Variable mit dem Code verglichen und dann wird je nach ergebnis eben der login als erfolgreich oder fehlgeschlagen erklärt.

Meine Frage wäre jetzt: Ist das überhaupt sicherer als eine einfache If-Abfrage? Können nich andere einfach die Werte von außen auslesen? Gibt es eine Bessere Methode? Was ist daran schlecht usw..
Mein Problem ist meine feste Zuordnung der Form "Buchstabe x = Zahl y".

Hier mal Codeausschnitte :

Die Deklarierung:
Code:
'originale Zeichen
Dim zeichen1 As String
Dim zeichen2 As String
Dim zeichen3 As String
Dim zeichen4 As String
Dim zeichen5 As String
Dim zeichen6 As String
Dim zeichen7 As String
Dim zeichen8 As String
Dim zeichen9 As String
Dim zeichen10 As String
'convertierte Zeichen
Dim czeichen1 As String
Dim czeichen2 As String
Dim czeichen3 As String
Dim czeichen4 As String
Dim czeichen5 As String
Dim czeichen6 As String
Dim czeichen7 As String
Dim czeichen8 As String
Dim czeichen9 As String
Dim czeichen10 As String
'Funktion Convertieren
Dim variable As String
Dim cvariable As String
Die festsetzung des Passworts
Code:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

passwort = "123"

Einlesen der Zeichen usw. :
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Zeichen einlesen
Try
zeichen1 = TextBox2.Text(0)
zeichen2 = TextBox2.Text(1)
zeichen3 = TextBox2.Text(2)
zeichen4 = TextBox2.Text(3)
zeichen5 = TextBox2.Text(4)
zeichen6 = TextBox2.Text(5)
zeichen7 = TextBox2.Text(6)
zeichen8 = TextBox2.Text(7)
zeichen9 = TextBox2.Text(8)
zeichen10 = TextBox2.Text(9)
Catch
MsgBox("Fehlerhafter Benutzername oder Passwort", MsgBoxStyle.Critical, "Achtung!")
End Try
'Zeichen convertieren
czeichen1 = Convertieren(zeichen1)
czeichen2 = Convertieren(zeichen2)
czeichen3 = Convertieren(zeichen3)
czeichen4 = Convertieren(zeichen4)
czeichen5 = Convertieren(zeichen5)
czeichen6 = Convertieren(zeichen6)
czeichen7 = Convertieren(zeichen7)
czeichen8 = Convertieren(zeichen8)
czeichen9 = Convertieren(zeichen9)
czeichen10 = Convertieren(zeichen10)
'Passwort abfragen
If czeichen1 + czeichen2 + czeichen3 + czeichen4 + czeichen5 + czeichen6 + czeichen7 + czeichen8 + czeichen9 + czeichen10 = passwort And txtbox_login.Text = login Then
Form2.Show()
Else : MsgBox("Fehlerhafter Benutzername oder Passwort", MsgBoxStyle.Critical, "Achtung!")
schreiben.Close()
End If
End Sub
Die Funktion

Code:
Public Function Convertieren(ByVal zeichen As String) As String
Select Case zeichen
'Großbuchstaben
Case "A"
Return "1"
Case "B"
Return "2"
Case "C"
Return "3"

Natürlich habe ich A-Z, a-z und 0-9 auch noch ;)

Würde mich über Antworten freuen.
03/18/2012 19:48 TyronP_G#2
Hey,

um eine "sichere" passwordabfrage zu machen würde ich nicht so ein quatsch machen(nicht böse gemeint ) sondern zu MD5 z.B wechseln ist simpler und besser meiner Meinung nach . Und .net code ist im Allgemeinen sehr unsicher.(Find ich )

Hiermit kannst du eine das Password zu einer md5 summe machen:

MD5:

Code:
Imports System.Security.Cryptography
Imports System.Text

Public Function MD5StringHash(ByVal strString As String) As String
    Dim MD5 As New MD5CryptoServiceProvider
    Dim Data As Byte()
    Dim Result As Byte()
    Dim Res As String = ""
    Dim Tmp As String = ""

    Data = Encoding.ASCII.GetBytes(strString)
    Result = MD5.ComputeHash(Data)
    For i As Integer = 0 To Result.Length - 1
        Tmp = Hex(Result(i))
        If Len(Tmp) = 1 Then Tmp = "0" & Tmp
        Res += Tmp
    Next
    Return Res
End Function
(Aus dem i-net programmiere nicht mit VB)


Einfach abfragen ob die Summe des eingegebenen Passwords der Summe der gespeicherten MD5-Summe entspricht.
03/18/2012 19:55 Al Kappaccino#3
Um es noch einmal für den TE zu erklären (weil ich nicht denke, dass er sich sogut damit auskennt ^^).

Ein MD5 Hash ist eine einseitige Verschlüsselung. Sprich du kannst z.B. aus "Hallo" einen MD5 Hash generieren lassen (wäre "d1bf93299de1b68e6d382c893bf1215f") diesen kannst du aber nicht wieder in "Hallo" zurück entschlüsseln.

Jeder Hash ist komplett einzigartig und deshalb wirst du immer ein anderes Ergebnis kriegen, je nachdem was du umwandelst.

Man verwendet es so:

Du wählst also als Passwort "Hallo".

Mit dem algo generiert man aus diesem String den MD5 Hash "d1bf93299de1b68e6d382c893bf1215f"

Dieser Hash wird in einer Datenbank abgelegt/gespeichert.

Wenn du dich nun einloggen willst, gibst du als Passwort "Hallo" ein, er generiert temporär wieder den MD5 Hash und überprüft dann ob er mit dem Hash aus der Datenbank übereinstimmt.



Im Prinzip wäre es so aufgebaut, nur als Information damit du es auch verwenden kannst ;)

MFG
03/18/2012 20:02 Salatgurke2011#4
Dank,
ich sollte laut Buch eine einfache Cäsar-Verschlüsselung machen, jetzt wollte ich die ganze Sache halt noch Komplexer machen.

So dann?
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Passwort
        Dim password As String
        password = "HASHCODE"
        If MD5F(txtbox_pw.Text) = password Then
            schreiben.Write("Uhrzeit: " & lbl_Zeit.Text & vbCrLf & "IP: " & lbl_ip.Text & vbCrLf & "Login: Erfolgreich" & vbCrLf & "_____________________" & vbCrLf)
            schreiben.Close()
            Form2.Show()
        Else : MsgBox("Fehlerhafter Benutzername oder Passwort", MsgBoxStyle.Critical, "Achtung!")
            schreiben.Write("Uhrzeit: " & lbl_Zeit.Text & vbCrLf & "IP: " & lbl_ip.Text & vbCrLf & "Login: Fehlgeschlagen" & vbCrLf & "_____________________" & vbCrLf)
            schreiben.Close()
        End If
    End Sub
    Public Function MD5F(ByVal Inhalt As String) As String
        Dim MD5 As New System.Security.Cryptography.MD5CryptoServiceProvider
        Dim Bytecode() As Byte = System.Text.Encoding.ASCII.GetBytes(Inhalt)
        Bytecode = MD5.ComputeHash(Bytecode)
        Dim HASH As String = 0
        For Each bt As Byte In Bytecode
            HASH &= bt.ToString
        Next
        Return HASH
    End Function
End Class
03/19/2012 09:15 boxxiebabee#5
Nimm lieber nen SHA hash mit nem Salt. Weil MD5 ist auch nicht mehr das sicherste wegen Rainbowtables.
03/20/2012 00:42 vwap#6
Nimm einer XOR Verschlüsselung.
Die passt du dann mit einem Salt deinen Wünschen an.

Fertig.
03/20/2012 18:13 Salatgurke2011#7
Danke ;)
Ich versuch mich mal daran das Umzusetzen ;)
03/23/2012 16:05 neils2161#8
Du kannst auch andere Verschlüssllungsmethoden anwenden, oder mehrere z.B. MD5 + Base64, wenn es nicht stimmt, korrigiert mich ! :D
03/23/2012 19:48 vwap#9
MD5 ist keine Verschlüsselung.
03/23/2012 21:49 Salatgurke2011#10
Habe jetzt jede eurer Ideen umgesetzt. Es sollte ja schließlich nur als Übung dienen. Danke ;)
03/24/2012 14:42 qickly#11
Warum benutzt du kein gutes Programmverschlüsselungs Tool was auch kostenlos ist? Die haben dann auch eine String Encryption somit wird alles etwas schwieriger zu cracken his hin zum 99% Schutz.
Warnung jeder Salt kann ausgelesen werden genauso deine Verfahren.... Wenn du nicht was dagegen tust.
03/24/2012 22:49 Salatgurke2011#12
Ich weiß leider nicht genau was du meinst. Ich bin wie gesagt noch am lernen, das Programm soll nur eine Übung sein. Ich sollte laut meinem Buch eine Caesar Verschlüsselung machen. Habe mich jetzt entschlossen einfach das ganze noch zu verbessern, weil die Caeser Verschlüsslung ja nicht grade sicher ist.
03/25/2012 01:57 qickly#13
Quote:
Originally Posted by Salatgurke2011 View Post
Ich weiß leider nicht genau was du meinst. Ich bin wie gesagt noch am lernen, das Programm soll nur eine Übung sein. Ich sollte laut meinem Buch eine Caesar Verschlüsselung machen. Habe mich jetzt entschlossen einfach das ganze noch zu verbessern, weil die Caeser Verschlüsslung ja nicht grade sicher ist.
Puh, du kannst kannst leicht die Datei patchen und den Login überspringen.
Du kommst bei hóher Sicherheit nicht um xy Hunter rum....
03/25/2012 05:57 vwap#14
Quote:
Originally Posted by qickly View Post
Puh, du kannst kannst leicht die Datei patchen und den Login überspringen.
Du kommst bei hóher Sicherheit nicht um xy Hunter rum....
Fürwas xy Hunter?
Ein Necrobit Layer ist derzeit noch nicht gecrackt worden, daher zählt das derzeit noch als 100% sicher (zumindest ist nichts public).
Unteranderem kann der .NET Reactor Necrobit Layer über eine .NET Assembly legen.
03/25/2012 14:44 qickly#15
Necrobit kostet, xy Hunter nicht....
Das macht auch keine Werbung und ich benutzte das... Ist wirklich sicher.

Necrobit kostet, xy Hunter nicht....
Das macht auch keine Werbung und ich benutzte das... Ist wirklich sicher.