VB Passwort im Programm oder sicher speichern
Hi, an Alle!
Ich bin in VisualBasic noch nicht so ein "Profi" und benötige deswegen eure Hilfe:
Ich habe einen Anmelde-Dialog mit Benutzernamen und Passwort.
Passend dazu eine Einstellungs-Seite, wo man den Benutzernamen
und ein neues Passwort eintragen kann.
Wenn der Benutzer nun auf speichern klickt wird das ganze in den My.Settings gespeichert.
Doch jetzt habe ich herausgefunden, dass die Daten "offen" in meinen Anwendungs-Dateien drin stehen.
Wie kann ich nun z.B. das Passwort "sicher" im Programm speichern?
Ich hoffe mir kann jem. helfen!
Alexss95
Ich bin in VisualBasic noch nicht so ein "Profi" und benötige deswegen eure Hilfe:
Ich habe einen Anmelde-Dialog mit Benutzernamen und Passwort.
Passend dazu eine Einstellungs-Seite, wo man den Benutzernamen
und ein neues Passwort eintragen kann.
Wenn der Benutzer nun auf speichern klickt wird das ganze in den My.Settings gespeichert.
Doch jetzt habe ich herausgefunden, dass die Daten "offen" in meinen Anwendungs-Dateien drin stehen.
Wie kann ich nun z.B. das Passwort "sicher" im Programm speichern?
Ich hoffe mir kann jem. helfen!
Alexss95
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121813
Url: https://administrator.de/contentid/121813
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Alexss95!
Die einfachste Möglichkeit währe z.B. das hier:
Etwas aufwendiger ginge es mit Rotier-Funktionen.
Gruß Dieter
Die einfachste Möglichkeit währe z.B. das hier:
Dim i As Integer, Pass As String, doPass As String, rePass As String
Pass = "ABCDEFGH"
For i = 1 To Len(Pass)
doPass = doPass & Chr(Asc(Mid(Pass, i, 1)) * 2) '= "‚„†ˆŠŒŽ"
Next
For i = 1 To Len(doPass)
rePass = rePass & Chr(Asc(Mid(doPass, i, 1)) / 2) '= "ABCDEFGH"
Next
Etwas aufwendiger ginge es mit Rotier-Funktionen.
Gruß Dieter
Hallo Alexxs95 und didi1954!
An sich gäbe es "Capicom.dll" zum Ermitteln von Passwort-Hashes - hier mal einen Ansatz in VBS gezeigt ...
... allerdings sollte das .NET-Framework auch andere Möglichkeiten bieten (zumindest wird für Windows 7 ein "Umstieg" empfohlen - siehe zB Data Security Component Cut from Windows 7 Dev Tools).
Grüße
bastla
An sich gäbe es "Capicom.dll" zum Ermitteln von Passwort-Hashes - hier mal einen Ansatz in VBS gezeigt ...
... allerdings sollte das .NET-Framework auch andere Möglichkeiten bieten (zumindest wird für Windows 7 ein "Umstieg" empfohlen - siehe zB Data Security Component Cut from Windows 7 Dev Tools).
Grüße
bastla
Hallo Alexxs95!
Eigentlich brauchst Du ja nur das Ermitteln des Hash-Wertes - eine leicht modifizierte Function dafür könnte so aussehen:
Wenn Du für Dein Passwort den Hashwert ermittelt hast - als Demo:
liefert als Ergebnis
kannst Du anstelle des Passworts im Klartext den Hashwert im Code verwenden oder speichern.
Zum Überprüfen eines eingegebenen Passwortes (strPW) genügt dann:
Ob der Hashwert (wie in diesem Beispiel) fest verdrahtet in Deinem Code steht oder von einem Speicherort eingelesen wird, ist Deine Entscheidung.
Besonders sicher ist das aber nicht, da bei Kenntnis der Verschlüsselungsmethode einfach der Hashwert durch einen "passenden" Wert ersetzt werden kann (was etwas leichter ist, wenn der Wert in einer Datei oder in der Registry steht, als wenn er als Konstante im Code verwendet wurde), woraufhin Dein Programm dann das zugehörige PW akzeptieren würde ...
Da ich mich bisher kaum näher mit Kryptographie bzw deren Anwendung beschäftigt habe, kann ich nur noch einen Link "in Richtung" .NET anbieten: Extending .NET Cryptography with CAPICOM and P/Invoke ...
Grüße
bastla
Eigentlich brauchst Du ja nur das Ermitteln des Hash-Wertes - eine leicht modifizierte Function dafür könnte so aussehen:
Function GetHash(ByVal strText)
Const CAPICOM_HASH_ALGORITHM_SHA1 = 0
Dim objHashedData = CreateObject("CAPICOM.HashedData")
objHashedData.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1
objHashedData.Hash(strText)
GetHash = objHashedData.Value
End Function
MsgBox GetHash("DasPW")
82701DE29C7E9BF57185DE360B9CB0F1068B6CED
Zum Überprüfen eines eingegebenen Passwortes (strPW) genügt dann:
If GetHash(strPW) = "82701DE29C7E9BF57185DE360B9CB0F1068B6CED" Then MsgBox("Passwort ist richtig")
Besonders sicher ist das aber nicht, da bei Kenntnis der Verschlüsselungsmethode einfach der Hashwert durch einen "passenden" Wert ersetzt werden kann (was etwas leichter ist, wenn der Wert in einer Datei oder in der Registry steht, als wenn er als Konstante im Code verwendet wurde), woraufhin Dein Programm dann das zugehörige PW akzeptieren würde ...
Da ich mich bisher kaum näher mit Kryptographie bzw deren Anwendung beschäftigt habe, kann ich nur noch einen Link "in Richtung" .NET anbieten: Extending .NET Cryptography with CAPICOM and P/Invoke ...
Grüße
bastla
Hallo bastla und Alexss95!
@bastla Dein Beispiel funktioniert bei mir leider nicht
Mit CreateObject("CAPICOM.HashedData") krieg ich ne Fehlermeldung (does not Contain hashed value).
Die Registrierung mit <regsvr32 capicom.dll> wurde bestätigt. Falsche Version ??? 2.1.0.2 - 04.2007
Noch ne Lösung mit zusätzlichem Schlüssel:
Quelle: http://www.aspheute.com/artikel/20020115.htm
Gruß Dieter
@bastla Dein Beispiel funktioniert bei mir leider nicht
Mit CreateObject("CAPICOM.HashedData") krieg ich ne Fehlermeldung (does not Contain hashed value).
Die Registrierung mit <regsvr32 capicom.dll> wurde bestätigt. Falsche Version ??? 2.1.0.2 - 04.2007
Noch ne Lösung mit zusätzlichem Schlüssel:
Const SecretKey = "A#0x?\$dE<" 'Geheimer Schlüssel nach belieben anpassen
Const EncryptionAlgorithmus_RC2 = 0 'Use RSA RC2 Encryption.
Const EncryptionAlgorithmus_RC4 = 1 'Use RSA RC4 Encryption.
Const EncryptionAlgorithmus_DES = 2 'Use DES Encryption.
Const EncryptionAlgorithmus_3DES = 3 'Use Triple DES Encryption.
Const EncryptionKeyLen_Max = 0 'Use Maximum Keys
Const EncryptionKeyLen_40Bits = 1 'Use 40-Bit Keys.
Const EncryptionKeyLen_56Bits = 2 'Use 56-Bit Keys
Const EncryptionKeyLen_128Bits = 3 'Use 128-Bit Keys
Function SetPassword(ByRef Text) As String
Dim EnCryption As Object
Set EnCryption = CreateObject("CAPICOM.EncryptedData")
With EnCryption
.Content = Text
.SetSecret SecretKey
.Algorithm.Name = EncryptionAlgorithmus_3DES
.Algorithm.KeyLength = EncryptionKeyLen_Max
SetPassword = Replace(.Encrypt(), vbCrLf, "")
End With
End Function
Function GetPassword(ByRef Text) As String
Dim DeCryption As Object
Set DeCryption = CreateObject("CAPICOM.EncryptedData")
With DeCryption
.SetSecret SecretKey
.Algorithm.Name = EncryptionAlgorithmus_3DES
.Decrypt (Text)
GetPassword = .Content
End With
End Function
Sub TestPassword()
Dim Encrypt As String, Decrypt As String
Encrypt = SetPassword("Mein Password") 'If Encrypt <> "" Then ...
Decrypt = GetPassword(Encrypt) 'If Decrypt <> "" Then ...
'Encrypt = "MFwGCSsGAQQBgjdYA6BPME0GCisGAQQBgjdYAwGgPzA9AgMCAAECAmgBAgIAgAQA" & _
' "BBD5qs4AJfUeQJkuKVBNiNpaBBpG0qP6p1gvESBTrK1hee2XTvA2elacN63mPA=="
'Decrypt = "Mein Password"
End Sub
Quelle: http://www.aspheute.com/artikel/20020115.htm
Gruß Dieter