Entwickler-Ecke

Internet / Netzwerk - VNC Passwort Encrypt/Decrypt


BlackSeven - Do 11.11.04 00:36
Titel: VNC Passwort Encrypt/Decrypt
Kurz zu meinem Problem:

Habe ein Programm geschrieben, welches VNC (Server) sowie weitere Dienste auf die ausgewählten Netzwerkcomputer mit einem vordefinierten Passwort verteilt. Dies funktioniert bisher problemlos. Nun suche ich jedoch nach einer Möglichkeit, die in der Registry verschlüsselten Passwörter jederzeit ändern zu können.


Greetz


patrick - Do 11.11.04 10:29

könntest du die frage nochmal anders formulieren? ich komm leider nicht dahinter was dein problem ist :cry:

du kannst aber das alte passwort im registry einfach überschreiben, wenn du das meinst....


Martin77 - Do 11.11.04 10:43

So wie Ich das verstanden habe sucht er den Algo um die Passwörter zu verschlüsseln, also um sein neues zu setzen. Decrypt würde mich darauf schliessen lassen das er das alte auch lesen will, was aber für seinen Zweck (aus meiner SIcht) nicht notwendig ist.

Martin


BlackSeven - Do 11.11.04 10:46

sorry, das ich mich nicht klar ausgedrückt habe...
hast schon recht, ich könnte im winvnc-server ein neues passwort generieren und das verschlüsselte passwort als registry-key abspeichern und auf den anderen rechnern verteilen...

ich brauche allerdings eine funktion, der ich ein passwort übergebe
z.b. 1234 - diese funktion sollte dann das passwort in verschlüsselter form (ab 38 a6 cf 30 44 d3 ff)
zurückgeben


function Encrypt(passwort : string) : string
begin
...
end;


Martin77 - Do 11.11.04 12:58

Kenne den Aglo nicht den VNC verwendet, aber wenn Ich mich nicht recht irre gibt es auf der Seite doch auch einen Source download. Also laden, versuchen zu vertsehen und ihn dann nachbilden ;)


Martin


patrick - Do 11.11.04 13:16

sowas macht man in der regel über prüfsummen.
am weitesten verbreitet ist der MD5 algo. wobei auch SHA stark im kommen ist.
source hab ich grad keinen da aber es gibt bei torry unmengen von komponenten die das leisten.

eine prüfsumme ist eine art eineweg-verschlüsselung->sie lässt sich zwar encodieren aber nicht mehr decodierten.
wozu dann das ganze??
ganz einfach: die verschlüsselten daten sind nicht mehr rückführbar
man erstellt eine prüfsumme und speichert diese ab.
ein angreifer kann die prüfsumme zwar sehen aber weis nicht wie das dazugehörige passwort heißt->nicht decodierbar.

wenn du nun überprüfen willst, ob das passwort stimmt, musst du nur das passwort wieder encodieren und anschließend das ergebnis mit der gespeicherten checksumme vergleichen.

in der regel werden noch zusätzliche daten zu dem passwort hinzugefügt (wie z.b. <passwort>+abc)
damit sich ein angreifer nicht ohne weiteres eine eigene checksumme von einem beliebigen passwort erstellen kann und die gespeicherte einfach durch seine ersetzt


matze - Do 11.11.04 15:32

saug dir den quellcode von VNC und schau dir den durch !


BlackSeven - Di 16.11.04 23:09

nicht gerade leicht, das in delphi code umzusetzen


matze - Mi 17.11.04 11:27

das denk ich mir.
du kannst den C code ja spasseshalber mal hier posten !


BlackSeven - Fr 18.02.05 23:41

hab da soeben was entdeckt: das ganze wäre mit einer dll zu lösen
doch wie setze ich das nun in delphi um?
muss zugeben, dass ich mich mit vb6 überhaupt nicht auskenne


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Private Declare Function vncDec Lib "vncauth.dll" Alias "vncDecryptPasswd" (ByVal sEncPass As String) As String
Private Declare Function vncEnc Lib "vncauth.dll" Alias "vncEncryptPasswd" (ByVal sUncPass As String) As String
Private Declare Function vncHex Lib "vncauth.dll" Alias "vncMakeHexFromBytes" (ByVal sEncPass As String) As String
Private Declare Function vncBty Lib "vncauth.dll" Alias "vncMakeBytesFromHex" (ByVal sHexPass As String) As String

Examples (for use with VB6):
   To encrypt a password use:
   sEncryptedPasswd = vncEnc(sPasswd)
   sEncryptedPasswd = Left$(sEncryptedPasswd, InStr(sEncryptedPasswd, vbNullChar) - 1)
   
   To decrypt a password use:
   sPasswd = vncDec(sEncryptedPasswd)
   sPasswd = Left$(sPasswd, InStr(sPasswd, vbNullChar) - 1)
   
   To make a hexdump out of the encrypted password:
   sHexEncrypted = vncHex(sEncryptedPasswd)
   sHexEncrypted = Left$(sHexEncrypted, InStr(sHexEncrypted, vbNullChar) - 1)
   
   To convert a hexdump back to the encrypted password:
   sEncryptedPasswd = vncBty(sHexEncrypted)
   sEncryptedPasswd = Left$(sEncryptedPasswd, InStr(sEncryptedPasswd, vbNullChar) - 1)



thx & greetz