Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Przepisanie malutkiego kodu z c++ ...
devastator
Inkwizytor




Typ: neutral
Postów: 5
Zarejestrowany: Mar 2004
Przepisanie malutkiego kodu z c++ ...

Piszemy komunikatorek internetowy. Oprócz własnego protokołu, chcemy umieścić GG . Protokół znaleźć łatwo. Jest jeden problem... procedura do hashowania hasla (w c++):

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;


Implementacje << i >> do vb znalazłem:
http://www.vbaccelerator.com/home/VB/Tips/Implementing_Unsigned_Right_and_Left_Shift_Operators/article.asp

W efekcie wyszło nam coś, czego efekt jest inny niż wersji w c++ :


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


Czy ktoś po prostu mógłby nam pomóc i przepisać kodzik z c do vb?
Na forum visual basic extreme admin kazał kupić programistę na rentacoder.com . Mam nadzieję, że Polacy będą trochę bardziej gościnni...


_____________________________________________
Intel Pentium 4 2.4B GHz @ 2.6 GHz | Asus P4S8X | 512 MB DDR333 | Sapphire ATI Radeon 9600 PRO | Seagate Barracuda ATA V 120 GB 7200 RPM 8MB Cache + Maxtor 40 GB 5400 RPM | SB Live! Value | LG DVD DRD8160B 16x | Lite-ON LDW-811S DVD+-R/+-RW

16-03-2004 19:07
Pokaż profil devastator  Wyślij email do devastator        1424369
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

Dobra ja moge do tego zagladnac ale dopiero w weekend bo jutro i pojutrze mam zajecia do 19
to dopiero dam Ci odpowiedz najpozniej w niedziele, pasuje ?

17-03-2004 09:38
Pokaż profil kicaj  Wyślij email do kicaj        3914568
devastator
Inkwizytor




Typ: neutral
Postów: 5
Zarejestrowany: Mar 2004

moze byc... nikt inny sie nie zainteresowal dotychczas, wiec dzieki


_____________________________________________
Intel Pentium 4 2.4B GHz @ 2.6 GHz | Asus P4S8X | 512 MB DDR333 | Sapphire ATI Radeon 9600 PRO | Seagate Barracuda ATA V 120 GB 7200 RPM 8MB Cache + Maxtor 40 GB 5400 RPM | SB Live! Value | LG DVD DRD8160B 16x | Lite-ON LDW-811S DVD+-R/+-RW

17-03-2004 16:33
Pokaż profil devastator  Wyślij email do devastator        1424369
devastator
Inkwizytor




Typ: neutral
Postów: 5
Zarejestrowany: Mar 2004

eee... nie widze odpowiedzi...


czy ktos inny moze mi pomoc?


_____________________________________________
Intel Pentium 4 2.4B GHz @ 2.6 GHz | Asus P4S8X | 512 MB DDR333 | Sapphire ATI Radeon 9600 PRO | Seagate Barracuda ATA V 120 GB 7200 RPM 8MB Cache + Maxtor 40 GB 5400 RPM | SB Live! Value | LG DVD DRD8160B 16x | Lite-ON LDW-811S DVD+-R/+-RW

12-04-2004 16:39
Pokaż profil devastator  Wyślij email do devastator        1424369
devastator
Inkwizytor




Typ: neutral
Postów: 5
Zarejestrowany: Mar 2004

dzieki...

no to teraz pytanie... kto moglby zrobic takiego dlla ? W tlumaczeniu kodu pomogl mi kumpel, bo ja c++ dosyc slabo znam... a zeby zrobic dlla w vc++ to juz wogole poddaje sie. Moglbym prosic o pomoc?

Pozdrawiam, Mrowek - dzieki


_____________________________________________
Intel Pentium 4 2.4B GHz @ 2.6 GHz | Asus P4S8X | 512 MB DDR333 | Sapphire ATI Radeon 9600 PRO | Seagate Barracuda ATA V 120 GB 7200 RPM 8MB Cache + Maxtor 40 GB 5400 RPM | SB Live! Value | LG DVD DRD8160B 16x | Lite-ON LDW-811S DVD+-R/+-RW

14-04-2004 17:55
Pokaż profil devastator  Wyślij email do devastator        1424369
devastator
Inkwizytor




Typ: neutral
Postów: 5
Zarejestrowany: Mar 2004

sorry, ze nie odpisywalem...

moze byc kiedy chcesz, byle w tym miesiacu

moj kolega probuje skompilowac libgadu (biblioteka gg z ekg na linuxa) poprzez cygwina, zeby na windowsie dzialalo i cos mu nie idzie :/. napoytka jakies errory... ja tam sie na tym nie znam.

ale protokol gg by sie przydal w naszym komunikatorku. jak chcesz z nami pogadac to albo na gg (1424369) albo na forum www.p2pkomunikator.prv.pl (dzial KOMENTARZE).

pozdrowka


_____________________________________________
Intel Pentium 4 2.4B GHz @ 2.6 GHz | Asus P4S8X | 512 MB DDR333 | Sapphire ATI Radeon 9600 PRO | Seagate Barracuda ATA V 120 GB 7200 RPM 8MB Cache + Maxtor 40 GB 5400 RPM | SB Live! Value | LG DVD DRD8160B 16x | Lite-ON LDW-811S DVD+-R/+-RW

20-04-2004 21:58
Pokaż profil devastator  Wyślij email do devastator        1424369
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004


5.
  zobaczcie funkcja xor basica:
  y = y Xor x
  y = 4,287852E+09 Xor 1828716544
  w rezultacie powinna pojawić się wartość:
  2459135730
  a nie "OVERFLOW"
 
  niestety basic jeżeli chodzi o typu danych to pozostaje
  daleko w tyle

Ale myślę, że da się to w jakiś sposób załatwić. Single/Double można przecież rozbić na fragmenty, które będą przechodziły przez XORa. Jeśli w C++ na danych ponad 32-bitowych XOR działa, to znaczy, że MUSI się dać to zrobić. Dlaczego? Bo to oznacza, że i w C++ te dane sa jakoś rozbijane (inaczej nie dałoby się ich wsadzić do 32-bitowego rejestru).
Jednak nie za bardzo rozumiem, skąd wziąłeś taką liczbę? Przecież x i y są w kodzie typu unsigned longint, czyli 32-bitowe, a ty tutaj dałeś wartość, której w taką zmienną się nie da upchnąć. Mam wrażenie, że czegoś nie zrozumiałem
---
A pozatym dzięki za te posty. Od jakiegoś czasu mam ochotę napisać coś do obsługi normalnych typów zmiennych (a także mniej normalnych) i nie mogłem się zmusić... teraz przynajmniej mam powód .

[Post edytowany dnia 08-07-2004 01:30 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

08-07-2004 01:28
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

A ja zrobiłem głupi błąd przy pisaniu posta - oczywiście, że wartości, które podałeś mieszczą się w zakresie unsigned... ja przez pomyłkę policzyłem sobie longint'a z VB :/.
Ale mimo to, mam wrażenie, że da się to jakoś załatwić. Co prawda VB nie radzi sobie z XORowaniem wartości 64- i 96-bitowych, ale może na nich przeprowadzać operacje arytmetyczne. A to wystarczy, by pobierać je fragmentami.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

08-07-2004 18:50
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Jeśli chodzi tylko o przechowywanie - da się zrobić procedurkę do przechowywania unsigned w zmiennej Long. Ale trudniej będzie z działaniami na takiej zmiennej. Zawsze pozostają zmienne 64-bitowe i 96-bitowe. Tutaj zakres unsigned longint mamy i możemy na nim wykonywać operacje. Tyle, że też nie wiem, gdzie jest granica możliwości VB. Do procedury z hashem powinno jednak wystarczyć.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

08-07-2004 21:25
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004


(...)jak y =0 i odejmujemy od niego to c ustawia rejestr y na maxymalną waRTOŚĆ reprezentowaną przez long unsigneed a następnie odejmuje od niego x.(...)

Nie rozumiem podkreślonego fragmentu . Tzn. nie rozumiem stwierdzenia, że odejmujemy to co ustawia rejestr y na maksymalną wartość... co odejmujemy i skąd to się wzięło?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-07-2004 11:33
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

A nie można by tego jakoś symulować w VB? Np. jeśli wartość będzie po odjęciu mniejsza od 0, to dodajemy 4294967295? Oczywiście mówię o działaniach na wspomnianych juz zmiennych co najmniej 64-bitowych.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-07-2004 12:31
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004


już próbowałem ale nic się nie dało
nawet na wartościach typu double


Zmienne Single/Double są zmiennoprzecinkowe i chociaż Double ma te 64 bity, to ich część idzie na zapisanie potęgi. Ja miałem na myśli 64-bitowe i 96-bitowe integery.

U mnie działa:
Dim x As Currency
Dim y As Currency
x = 5 'tutaj dowolna wartość do odjęcia
y = y - x
If y < 0 Then y = y + 4294967295@


Oczywiscie VB nie poradzi sobie potem z operacjami logicznymi na takich dużych zmiennych, ale do tego można je rozbić na mniejsze fragmenty, a potem znowu złożyć.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-07-2004 12:54
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 11 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1