Menu:

JS-MD5-Login - pseudo code

Hier die neue Variante, des JS-MD5-Login, die seit PyLucid v0.7.2alpha implementiert ist.

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from md5 import new as md5_new

def md5(txt):
    return md5_new(txt).hexdigest()

def encrypt(txt, key): # Pseudo encrypt
    return "encrypted %s with %s" % (txt, key)

def decrypt(txt, key): # Pseudo decrypt
    txt, _, key2 = txt.split(" ", 3)[1:]
    assert key == key2
    return txt

print "\n\n------------ 1. Ein neuer User in der DB anlegen------------"
print "\n 1.1. Server sendet salt zum Client:",
salt = "s_123"
print "'%s'" % salt

print "\n 1.2. Eingabe des Passwortes auf dem Client:",
password = "Passwort"
print "'%s'" % password

print "\n 1.3. md5(password + salt):",
md5sum = md5(password + salt)
print "'%s'" % md5sum

print "\n 1.4. Übermittlung der MD5 Summe zum Server."

print "\n\n------------ 2. speichern des Users auf dem Server------------"

print "\n 2.1. Server trennt die MD5 in:",
md5_a = md5sum[:16]
md5_b = md5sum[16:]
print "md5_a: '%s' md5_b: '%s'" % (md5_a, md5_b)

print "\n 2.2. encrypt(md5_a, key=md5_b):",
md5checksum = encrypt(md5_a, key=md5_b)
print "'%s'" % md5checksum

print "\n 2.3. Speichern nur der verschlüsselten Checksum + salt\n"

print "_______________________________________________________________________"

print "\n\n------------ 3. Login eines Users------------"

print "\n 3.1. Server sendet salt '%s' + challenge zum client:" % salt,
challenge = "c_123"
print "'%s'" % challenge

print "\n 3.2. Eingabe des Passwortes auf dem Client:",
password = "Passwort"
print "'%s'" % password

print "\n 3.3. md5(password + salt):",
md5sum = md5(password + salt)
print "'%s'" % md5sum

print "\n 3.4. trennen der MD5 in:",
md5_a = md5sum[:16]
md5_b = md5sum[16:]
print "md5_a: '%s' md5_b: '%s'" % (md5_a, md5_b)

print "\n 3.5. md5_a2 = md5(md5_a + challenge):",
md5_a2 = md5(md5_a + challenge)
print "'%s'" % md5_a2

print "\n 3.6. Übermittlung von md5_a2 und md5_b."

print "\n\n------------ 4. check auf dem Server------------"

print "\n 4.1. aus der DB md5checksum: '%s'" % md5checksum

print "\n 4.2. decrypt(md5checksum, key=md5_b):",
md5checksum = decrypt(md5checksum, key=md5_b)
print "'%s'" % md5checksum

print "\n 4.3. md5(md5checksum + challenge):",
md5check = md5(md5checksum + challenge)
print "'%s'" % md5check
print "\n 4.4. Vergleich: %s == %s" % (md5check, md5_a2)

Die Ausgaben, sehen dann so aus:

unknown type
------------ 1. Ein neuer User in der DB anlegen------------


1.1. Server sendet salt zum Client: 's_123'



1.2. Eingabe des Passwortes auf dem Client: 'Passwort'



1.3. md5(password + salt): '7522381eebd7c49a2522d09797ba20d2'



1.4. Übermittlung der MD5 Summe zum Server.



------------ 2. speichern des Users auf dem Server------------



2.1. Server trennt die MD5 in: md5_a: '7522381eebd7c49a' md5_b: '2522d09797ba20d2'



2.2. encrypt(md5_a, key=md5_b): 'encrypted 7522381eebd7c49a with 2522d09797ba20d2'



2.3. Speichern nur der verschlüsselten Checksum + salt



_______________________________________________________________________



------------ 3. Login eines Users------------



3.1. Server sendet salt 's_123' + challenge zum client: 'c_123'



3.2. Eingabe des Passwortes auf dem Client: 'Passwort'



3.3. md5(password + salt): '7522381eebd7c49a2522d09797ba20d2'



3.4. trennen der MD5 in: md5_a: '7522381eebd7c49a' md5_b: '2522d09797ba20d2'



3.5. md5_a2 = md5(md5_a + challenge): 'd3510bc87cf09bd7df69d180805e76fa'



3.6. Übermittlung von md5_a2 und md5_b.



------------ 4. check auf dem Server------------



4.1. aus der DB md5checksum: 'encrypted 7522381eebd7c49a with 2522d09797ba20d2'



4.2. decrypt(md5checksum, key=md5_b): '7522381eebd7c49a'



4.3. md5(md5checksum + challenge): 'd3510bc87cf09bd7df69d180805e76fa'


4.4. Vergleich: d3510bc87cf09bd7df69d180805e76fa == d3510bc87cf09bd7df69d180805e76fa