Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: szyfrowania z kluczem
Forum PHP.pl > Forum > PHP
phoenix84
Witam,

temat ciagle powielany na forum, ale ciagle nie moge znalezc tego, czego szukam... chodzi o zwyczajne szyfrowanie z kluczem... po przecyztaniu dziesiatek artykulow o wszystkim tylko nie o tym czego szukam, musialem zalozyc nowy watek smile.gif... szukam "prostej" funkcji w PHP (jesli istnieje) do szyfrowania i deszyfrowania informacji... nie chodzi mi o hashowania, i wlasciwie nie o RSA (nie chce mi sie generowac kluczy)... chodzi o cos dokladnie takiego: szyfruj (wiadomosc, klucz) oraz deszyfruj (szyfr, klucz)... bo az m sie wierzyc nie chce ze taka funkcja nie isntieje... bo wszedzie albo wraca sie notorycznie do hashy, albo do jakichs skomlikowanych algorytmow typu RSA, albo conajmniej kilkulinijkowych implementacji, a ja chce po prostu szyfrowac za pomoca klucza/hasla i juz... czy to czego szukam w ogole nie istnieje? czy jest tak niepopularne, ze sie niestosuje?

pozdrawiam,

k.
kalmaceta
w starszych czasach wystarczyło XOR'owanie, w php też jest (operator ^) chociaż to nie zadziała jak kiedyś, trzeba trochę na około. Polecam użyć prostej klasy (ze strony http://snipplr.com/view.php?codeview&id=8421)


  1. <?php
  2. class xorCrypt {
  3. private $password = NULL;
  4.  
  5. public function set_key($password) {
  6. $this->password = $password;
  7. }
  8.  
  9. private function get_rnd_iv($iv_len) {
  10. $iv = '';
  11. while ($iv_len-- > 0) {
  12. $iv .= chr(mt_rand() & 0xff);
  13. }
  14. return $iv;
  15. }
  16.  
  17. public function encrypt($plain_text, $iv_len = 16) {
  18. $plain_text .= "\x13";
  19. $n = strlen($plain_text);
  20. if ($n % 16) {
  21. $plain_text .= str_repeat("\0", 16 - ($n % 16));
  22. $i = 0;
  23. $enc_text = $this->get_rnd_iv($iv_len);
  24. $iv = substr($this->password ^ $enc_text, 0, 512);
  25. while ($i < $n) {
  26. $block = substr($plain_text, $i, 16) ^ pack('H*', sha1($iv));
  27. $enc_text .= $block;
  28. $iv = substr($block . $iv, 0, 512) ^ $this->password;
  29. $i += 16;
  30. }
  31. return base64_encode($enc_text);
  32. } else {}
  33. }
  34.  
  35. public function decrypt($enc_text, $iv_len = 16) {
  36. $enc_text = base64_decode($enc_text);
  37. $n = strlen($enc_text);
  38. $i = $iv_len;
  39. $plain_text = '';
  40. $iv = substr($this->password ^ substr($enc_text, 0, $iv_len), 0, 512);
  41. while ($i < $n) {
  42. $block = substr($enc_text, $i, 16);
  43. $plain_text .= $block ^ pack('H*', sha1($iv));
  44. $iv = substr($block . $iv, 0, 512) ^ $this->password;
  45. $i += 16;
  46. }
  47. return stripslashes(preg_replace('/\\x13\\x00*$/', '', $plain_text));
  48. }
  49. }
  50.  
  51. $xorCrypt = new xorCrypt();
  52. $xorCrypt->set_key("Your Secret Key");
  53.  
  54. $text = "hello world!";
  55. $encrypted = $xorCrypt->encrypt($text);
  56.  
  57. echo $encrypted;
  58. echo "<br />";
  59. echo $xorCrypt->decrypt($encrypted);
  60. ?>


ewentualnie coś takiego

  1. function x_Encrypt($string, $key)
  2. {
  3. for($i=0; $i<strlen($string); $i++)
  4. {
  5. for($j=0; $j<strlen($key); $j++)
  6. {
  7. $string[$i] = $string[$i]^$key[$j];
  8. }
  9. }
  10.  
  11. return $string;
  12. }
  13.  
  14. function x_Decrypt($string, $key)
  15. {
  16. for($i=0; $i<strlen($string); $i++)
  17. {
  18. for($j=0; $j<strlen($key); $j++)
  19. {
  20. $string[$i] = $key[$j]^$string[$i];
  21. }
  22. }
  23.  
  24. return $string;
  25. }
Mephistofeles
http://www.php.net/manual/en/mcrypt.ciphers.php
phoenix84
te proste funkcje co dales na xor to jest chyba doakldnie to czego szukalem...

dzieki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.