Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> szyfrowanie RC4, a klucz mieszany przez sha1
Cathan
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.04.2005

Ostrzeżenie: (0%)
-----


Witam
Mam pytanie.
Musze zaszyfrowac string za pomoca RC4 - i nie bylo by tak zle, gdyby nie fakt - iz klucz jest szyfrowany sha1. php zwraca problem z dlugośćią stringa - sha daje 40 obslugiwany jest 32

a na php.net jestraczej srednia rada
Cytat
Avoid using string representations hashes - md5() or sha1() - because hex encoding uses a set of only 16 characters [0-9a-f], which is equivalent to 4 bits, and thus halve the strength of your encryption: 4 x 32 = 128-bit.


a koniecznie klucz musi byc szyfrowany przez sha1

Jak rozwiazać taki problem??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
hawk
post
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Może czegoś tu nie rozumiem, ale jeżeli klucz jest szyfrowany przez sha1, to nic się nie da zrobić. Bo sha1 to funkcja hashująca i nie da się już odzyskać tego klucza. A klucz, jak sama nazwa wskazuje, jest w szyfrowaniu kluczowy (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif) .
Go to the top of the page
+Quote Post
Cathan
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.04.2005

Ostrzeżenie: (0%)
-----


No moj blad (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) - w opisie postu napisane jest poprawnie. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Chodzi o to, ze klucz jest wlasnie tworzony przez sha1 ktora zdecydowanie jest funkcja hashujaca - jednak za kazdym razem zwraca identyczna wartosc dla danej zmiennej , jednak ja nie chce klucza odczytywac - bede korzystal z niego jush po hashowaniu - tylko to co za pomoca tego klucza zaszyfruje przez RC4

skrypt na php.net to jest cos takiego
  1. <?php
  2.    $key = &#092;"this is a secret key\";
  3.    $input = &#092;"Let us meet at 9 o'clock at the secret place.\";
  4.  
  5.    $td = mcrypt_module_open('tripledes', '', 'ecb', '');
  6.    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  7.    mcrypt_generic_init($td, $key, $iv);
  8.    $encrypted_data = mcrypt_generic($td, $input);
  9.    mcrypt_generic_deinit($td);
  10.    mcrypt_module_close($td);
  11. ?>


a klucz normalnie hashujemy zdaje sie tak

  1. <?php
  2.  
  3. $key = &#092;"fraza\";
  4. $key = sha1($key);
  5.  
  6. ?>



Jak przerobic kod z php.net , aby dał sobie rade z zaszyfrowaniem $input metoda RC4 z takim wlasnie kluczem generowanym za pomoca sha1?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Delphi sobie dalo rade (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) i teraz musze sie meczyc (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
( zakladam oczywiscie ze wyniki szyfrowanie bede identyczne:P - prawda (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) )

Pozdrawiam

Ten post edytował Cathan 9.07.2005, 00:06:59
Go to the top of the page
+Quote Post
orson
post
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

Ostrzeżenie: (0%)
-----


witam ...

albo mi się wydaje albo zmiana key na sha1(key) wystarczy żeby szyfrować przez hasło w sha1 ... potem wystarczy zmienić wywołanie mcrypt_generic($td, $input); na mcrypt_generic(MCRYPT_RC4, $input); i teoretycznie to wystarczy ... wszystko jest opisane w manualu.

pozdrawiam
Go to the top of the page
+Quote Post
Cathan
post
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.04.2005

Ostrzeżenie: (0%)
-----


Dla zainteresownaych - info

DLEPHI ZWRACA CO INNEGO NIZ php

(IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)

porazka

orson - teoretycznie tak, ale w praktyce php wali komunikatem:

Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Key size too large; supplied length: 40, max: 32 in

Natomiast w delphi wszystko jest ok.
Moral z tego taki - nie da sie dobrac do wpisow w bazie kodowanych przez delphi - a bynajmniej mnie ten temat przerosl (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował Cathan 11.07.2005, 12:36:55
Go to the top of the page
+Quote Post
Imperior
post
Post #6





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

Ostrzeżenie: (0%)
-----


Nie ma czegoś takiego jak "DLEPHI ZWRACA CO INNEGO NIZ php". Program napisany w Delphi zwraca to co ma, czyli jak go zaprojektowano. Poszukaj innych implementacji algorytmów. (lub opcji w obecnych)
Go to the top of the page
+Quote Post
Cathan
post
Post #7





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.04.2005

Ostrzeżenie: (0%)
-----


Moje zalozenie bylo takie, ze jesli w delphi inicjujemy string dla klucza z jakiejs zmiennej z pomoca sha1 i szyfrujemy za jego pomoca przez RC4 to algorytmy zarowno sha1 oraz RC4 sa takie same zarowno w php jak i delphi. Fakt ze w Delphi zostal uzyty komponent, jednak wyniki zwraqcane sa całkowicie inne. w php dostajemy straszne krzaki cos jak "qJóŤełĹ])WJr -" natomiast zwroty w delphi sa "cywilizowane" (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) i wygladaja np. tak "F9zx==", jak dla mnie sa to całkowicie inne rzeczy i nie ma opcji zeby jakkolwiek je porownac.
Po przeanalizowaniu dokladnie wszystkich procedur w komponentach w deplphi prawdopodobnie dalo by sie uzyskac taki sam wynik w php jednak nie niestety na to czasu, (ani chyba wiedzy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) )

Na szczescie pojawil sie plan B rozwiaznia problemu i jush wszystko jest O.K (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Pozdrawiam

Ten post edytował Cathan 11.07.2005, 14:02:14
Go to the top of the page
+Quote Post
orson
post
Post #8





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

Ostrzeżenie: (0%)
-----


witam ...

ale w przykładzie który podałeś użyto innego szyfrowania niż RC4 ... może długość klucza jest uwarunkowana algorytmem (raczej na pewno) ... zmień funkcję na rc4 zaszyfruj coś (string 123) krótkim hasłem (string 123) i sprawdz czy to samo dostaniesz w delphi ... jeżeli tak to sprawdź na długim haśle (np. sha1('123'); ) i jeżeli nadal będzie że za długie to ... obcinaj (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ... przecież jeżeli w delphi obetniesz i w php obetniesz do 32 znaków to hasło jest takie samo ... więc wynik również będzie identyczny (musi - zasada szyfrowania: żeby dało się odszyfrować (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) a że wycinasz ileś znaków to przecież nie szkodzi ...

pozdrawiam
Go to the top of the page
+Quote Post
Cathan
post
Post #9





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.04.2005

Ostrzeżenie: (0%)
-----


Sprawdzałem
wlasnie w tym byl ze tak powiem główny problem
klucz, który byl krotki dawał doskonale rade, nie waliło błedami itd. Problemy powstawały przy hashowaniu poprostu string robil sie za dozy jak dla klucza prywatnego, ktorego php ustaliło na nie wiecej niz 32 znaki.

A co do Delphi to problem byl juz z przechwyceniem samego klucza. Dziwny ten jezyk (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Nie moowiac jush o ograniczaniu go (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Kod ktory zacytowalem na poczatku, jak napisalem pochodzil z php.net
nie chcialem w nim nic mieszac - z racji tego, ze wszystkie moje prooby obalenia 32 znakowego ograniczenia klucza padly na twarz (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ciekaw jestem czy da sie cos takiego wogoole zrobic w php- tak ja w delphi z kluczem hashowanym - ale bez ograniczania stringa (co mimo wszystko jest dosc sprytne musze przyznac (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ).


Pozdrawiam
Go to the top of the page
+Quote Post
hwao
post
Post #10


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Stary temat ale trafia się na niego przez google przy specificznym problemie, więc daje rozwiązanie:

Korzystając z:
http://pear.php.net/package/Crypt_RC42/doc...ptRC42.php.html

  1. <?php
  2.  
  3. $key = "klucz";
  4.  
  5. $message = file_get_contents( 'input.txt' );
  6.  
  7. include '/Crypt/RC42.php';
  8. $rc4 = new Crypt_RC42();
  9.  
  10. $key = ( sha1( $key, true ) );
  11.  
  12. $rc4->key($key);
  13.  
  14. $message = $rc4->encrypt($message);
  15. file_put_contents( 'output.txt', $message );
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 14:25