po polsku
Strona: [ > ] z 1
Autor
Temat: Protokó³ GG - hash has³a
bisiek
Typ:
neutral
Postów: 487
Zarejestrowany: Jul 2003
Protokó³ GG - hash has³a
Witam
Oryginalna procedura to:
int gg_login_hash(char *password, int seed)
{
unsigned int x, y, z;
y = seed;
for (x = 0; *password; password++) {
x = (x & 0xffffff00) | *password;
y ^= x;
y += x;
x <<= 8;
y ^= x;
x <<= 8;
y -= x;
x <<= 8;
y ^= x;
z = y & 0x1f;
y = (y << z) | (y >> (32 - z));
}
return y;
}
Po przetworzeniu na VB (tak znalaz³em na forum) wygl±da tak:
Function MKHash(ByVal password As String, ByVal seed As Long) As Long
Dim x As Long, y As Long, z As Long, i As Long
y = seed
For i = 1 To Len(password)
x = (x And &HFFFFFF00) Or LenB(password)
y = y Xor x
y = y + x
x = LShift(x, 8)
y = y Xor x
x = LShift(x, 8)
y = y - x
x = LShift(x, 8)
y = y Xor x
z = y And &H1F
y = (LShift(y, z)) Or (RShift(y, (32 - z)))
Next
MKHash = y
End Function
I zastanawia mnie w tym, ¿e:
a) *password wystêpuje dwa razy i jest zmieniony na Len(password) i LenB(password). Dlaczego?
b) Funkcja jest podana dobrze, a hash has³a chyba zale¿y chyba nie tylko od jego d³ugo¶ci, ale tak¿e od jego tre¶ci. Tylko gdzie s± wprowadzane te znaki - bo znalaz³em tylko d³ugo¶æ?
[Post edytowany dnia 06-12-2004 18:43 przez bisiek]
_____________________________________________
www.mob.abc.pl - moja strona o VB
06-12-2004 18:37
3380672
anonim
Typ:
Nie zarejestrowany
seed - co to oznacza ten argument skad wziac jego wartosc?
06-12-2004 18:46
marcin_an
Forumowicz
Typ:
neutral
Postów: 1265
Zarejestrowany: Mar 2004
Ju¿ skrobiê wersjê w VB...
_____________________________________________
Popieram losmaca:
1) Ludzie, dbajcie o polszczyznê!!!
2) Ludzie, zadawajcie kompletne pytania, a nie - rzucacie och³apy i trzeba siê domy¶laæ o co chodzi!!!
___
NOWE FORUM
07-12-2004 02:58
marcin_an
Forumowicz
Typ:
neutral
Postów: 1265
Zarejestrowany: Mar 2004
To powinno ju¿ dzia³aæ dobrze:
Function gg_login_hash(sPassword As String, nSeed As Long) As Long
Dim x As Long, y As Long, z As Long
Dim ptrCC As Long
y = nSeed
For ptrCC = 0 To Len(sPassword) - 1
x = x And &HFFFFFF00
x = x Or CLng(Asc(Mid$(sPassword, ptrCC + 1, 1)))
y = y Xor x
y = usum(y, x)
x = lsh(x, 8)
y = y Xor x
x = lsh(x, 8)
y = udif(y, x)
x = lsh(x, 8)
y = y Xor x
z = y And &H1F&
y = lsh(y, z) Or rsh(y, 32 - z)
Next
gg_login_hash = y
End Function
Trzeba tylko jeszcze dopisaæ 4 funkcje:
lsh, rsh (left-shift, right-shift)
usum, udif (sumowanie, odejmowanie)
To tak¿e postaram siê zrobiæ, ale mo¿e chwilkê potrwaæ (VB u¿ywa dope³nienia do 1, co trochê utrudnia dzia³ania na poziomie bitów).
[Post edytowany dnia 07-12-2004 03:59 przez marcin_an]
_____________________________________________
Popieram losmaca:
1) Ludzie, dbajcie o polszczyznê!!!
2) Ludzie, zadawajcie kompletne pytania, a nie - rzucacie och³apy i trzeba siê domy¶laæ o co chodzi!!!
___
NOWE FORUM
07-12-2004 03:56
bisiek
Typ:
neutral
Postów: 487
Zarejestrowany: Jul 2003
Wg. mnie VB lepiej radzi sobie z dodawaniem i odejmowaniem ni¿ z oreracjami bitowymi. Dlatego przygotowa³em ju¿ funkcje and, or, xor
Public Function lXor(ByVal l1 As Variant, l2 As Variant) As Variant
Dim a As Variant, b As Variant, c As Variant, d As Long
Do
DoEvents
a = (l1 / 256 - Int(l1 / 256)) * 256
b = (l2 / 256 - Int(l2 / 256)) * 256
l1 = Int(l1 / 256)
l2 = Int(l2 / 256)
c = c + (a Xor b) * (256 ^ d)
d = d + 1
If l1 = 0 And l2 = 0 Then Exit Do
Loop
lXor = c
End Function
Public Function lAnd(ByVal l1 As Variant, l2 As Variant) As Variant
Dim a As Variant, b As Variant, c As Variant, d As Long
Do
DoEvents
a = (l1 / 256 - Int(l1 / 256)) * 256
b = (l2 / 256 - Int(l2 / 256)) * 256
l1 = Int(l1 / 256)
l2 = Int(l2 / 256)
c = c + (a And b) * (256 ^ d)
d = d + 1
If l1 = 0 And l2 = 0 Then Exit Do
Loop
lAnd = c
End Function
Public Function lOr(ByVal l1 As Variant, l2 As Variant) As Variant
Dim a As Variant, b As Variant, c As Variant, d As Long
Do
DoEvents
a = (l1 / 256 - Int(l1 / 256)) * 256
b = (l2 / 256 - Int(l2 / 256)) * 256
l1 = Int(l1 / 256)
l2 = Int(l2 / 256)
c = c + (a Or b) * (256 ^ d)
d = d + 1
If l1 = 0 And l2 = 0 Then Exit Do
Loop
lOr = c
End Function
Funkcje LShift i RShift mo¿na znale¶æ w VBFaq:
Public Function LShift(ByVal lThis As Variant, ByVal lBits As Variant) As Variant
If (lBits <= 0) Then
'b³êdny parametr ...
LShift = lThis
ElseIf (lBits > 31) Then
'b³êdny parametr ...
LShift = 0
Else
If (lAnd(lThis, (2 ^ (31 - lBits)))) = (2 ^ (31 - lBits)) Then
LShift = (lAnd(lThis, (2 ^ (31 - lBits) - 1))) * lOr((2 ^ lBits), &H80000000)
Else
LShift = (lAnd(lThis, (2 ^ (31 - lBits) - 1))) * (2 ^ lBits)
End If
End If
End Function
Public Function RShift(ByVal lThis As Variant, ByVal lBits As Variant) As Variant
If (lBits <= 0) Then
'b³êdny parametr ...
RShift = lThis
ElseIf (lBits > 31) Then
'b³êdny parametr ...
RShift = 0
Else
If lAnd(lThis, &H80000000) = &H80000000 Then
RShift = lAnd(lThis, &H7FFFFFFF) lOr((2 ^ lBits), (2 ^ (31 - lBits)))
Else
RShift = lThis / (2 ^ lBits)
End If
End If
End Function
Ju¿ je przerobi³em tak, zby u¿ywa³u funkcji bitowych dla d³ugich liczb, ale nie mam pewno¶ci ¿e gdzie¶ nie ma b³êdu.
Dziêki za poprawion± pêtlê.
[Post edytowany dnia 07-12-2004 10:12 przez bisiek]
_____________________________________________
www.mob.abc.pl - moja strona o VB
07-12-2004 10:03
3380672
marcin_an
Forumowicz
Typ:
neutral
Postów: 1265
Zarejestrowany: Mar 2004
W lXor np. dla 0xFFFF i 0xFFFF wystêpuje overflow.
Poza tym nie zauwa¿y³em by nie radzi³ sobie z operacjami bitowymi, natomiast nie ma wbudowanych funkcji do dodawania i odejmowania, dlatego w³a¶nie je wybra³em. Co prawda mo¿na zastosowaæ zmienne 64-bitowe, z którymi sobie proadzi, ale wtedy trzeba znowu pisaæ du¿o funkcji na wszystko inne, zamieniaæ na 32-bitowe, potem wracaæ do zapisu 64-bitowego itd...
_____________________________________________
Popieram losmaca:
1) Ludzie, dbajcie o polszczyznê!!!
2) Ludzie, zadawajcie kompletne pytania, a nie - rzucacie och³apy i trzeba siê domy¶laæ o co chodzi!!!
___
NOWE FORUM
07-12-2004 16:23
bisiek
Typ:
neutral
Postów: 487
Zarejestrowany: Jul 2003
Hmm, sprawdzi³em - podaje 0 i nie wystêpuje overflow. Co do dodwania i odejmowania - typowych funkcji nie ma, ale dlaczego nie u¿yæ operatorów?
_____________________________________________
www.mob.abc.pl - moja strona o VB
07-12-2004 17:35
3380672
marcin_an
Forumowicz
Typ:
neutral
Postów: 1265
Zarejestrowany: Mar 2004
Ja sprawdzi³emi wysz³o mi overflow...
Dodawanie i odejmowanie - VB nie potrafi dodawaæ i odejmowaæ takich liczb, albo siê nie rozumiemy. Podaj przyk³ad .
_____________________________________________
Popieram losmaca:
1) Ludzie, dbajcie o polszczyznê!!!
2) Ludzie, zadawajcie kompletne pytania, a nie - rzucacie och³apy i trzeba siê domy¶laæ o co chodzi!!!
___
NOWE FORUM
08-12-2004 04:18
bisiek
Typ:
neutral
Postów: 487
Zarejestrowany: Jul 2003
Maksymalny rozmiar liczb to 32 bity czyli powinien poradziæ sobie tak¿e z operacjami takimi jak:
MsgBox 4294967295# Xor 4294967296#
MsgBox 4294967296# - 4294967296#
Kiedy próbujê to wykonaæ, to jest b³±d przy xor, a przy odejmowaniu nie ma.
_____________________________________________
www.mob.abc.pl - moja strona o VB
08-12-2004 16:23
3380672
marcin_an
Forumowicz
Typ:
neutral
Postów: 1265
Zarejestrowany: Mar 2004
Problem w tym, ¿e w kodzie potrzebne s± 32-bitowe.. ale bez znaków. VB nie ma wbudowanych typów tego rodzaju i nie potrafi ich obs³ugoiwaæ. W³a¶nie z tym od samego pocz±tku by³ problem. Mo¿na albo zast±piæ je zmiennymi 64-bitowymi, które bêd± w stanie przechowaæ wynik i bêdzie mo¿na u¿ywaæ ich do dodawania i odejmowania, ale trzeba bêdzie dorobiæ funkcje odpowiedzialne za operacje binarne. Mo¿na te¿ pozostaæ przy 32-bitowych i dorobiæ tylko 2 funkcje - do sumowania i odejmowania. Poniewa¿ z tym drugim jest znacznie mniej roboty - wybra³em w³asnie takie rozwiazanie .
_____________________________________________
Popieram losmaca:
1) Ludzie, dbajcie o polszczyznê!!!
2) Ludzie, zadawajcie kompletne pytania, a nie - rzucacie och³apy i trzeba siê domy¶laæ o co chodzi!!!
___
NOWE FORUM
08-12-2004 17:10
bisiek
Typ:
neutral
Postów: 487
Zarejestrowany: Jul 2003
Aha, bo np. long jest 32-bitowe i przy xor z dodatnich stan± siê ujemnymi. Ju¿ wszysko rozumiem.
Tylko, ¿e nied³ugo powinno wyj¶c GG 7.0 i prawdopodobnie zmieni siê sposób hashowania i stara wersja ju¿ nie bêdzie do niczego potrzebna.
_____________________________________________
www.mob.abc.pl - moja strona o VB
08-12-2004 18:38
3380672
Wszystkich odpowiedzi: 10 ::
Maxymalnie na stronê: 20
Strona: [ > ] z 1
zanotowane.pldoc.pisz.plpdf.pisz.plpajaa1981.pev.pl