Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szyfrowanie XOR w php - coś nie działa.
Forum PHP.pl > Forum > Przedszkole
usercontrol
Witam !
Naskrobałem coś takiego:
  1. <?
  2. function XOREn($CodeKey, $DataIn)
  3. {
  4.  
  5. for ($DataPtr=1; strlen($DataIn); $DataPtr++){
  6.  
  7. $XORValue1 = ord(substr($DataIn, $DataPtr, 1));
  8. $XORValue2 = ord(substr($CodeKey, (($DataPtr % strlen($CodeKey)) + 1), 1));
  9. $DataOut .= chr($XORValue1 ^ $XORValue2);
  10. }
  11. return $DataOut;
  12.  
  13. }
  14. ?>
  15.  
  16. Moja stronka !<bR>
  17. oto wartość XOR'a: "
  18. <?
  19. $CK="muahaha";
  20. $DataX="haselko";
  21. echo XOREn($CK, $DataX);
  22. ?>


To ma być szyfrowanie algorytmem XOR, jednak przy ładowaniu tego pliku strona jakgdyby "staje": W operze nic sie nie wyswietla i pisze caly czas "łączenie" co świadczy o ładowaniu strony..
co napisałem nie tak?

pozdrawiam
crash
Huh smile.gif Bierzesz się za "szyfrowanie" a nie wiesz jak używać pętli for. Ciekawe...
usercontrol
Ehh...
Mogłem sie domyslic, ze natrafie na lamera ktory zamiast pomoc tylko opieprzy..
Zdaje mi sie ze to jest dzial dla poczatkujacych. widze, ze poczatkujacy robiacy typowe bledy nie maja nic do gadania.
Programowalem wczesniej w innych jezykach, wiem do czego sluzy FOR i jak dziala, zapewniam cie, ze kazdemu programiscie zdarza sie pomylka


pozdrawiam
dr_bonzo
"lamer to ten kto zbyt czesto okresla innym mianem lamera"

Zle ustawiles warunek koncowy petli:
strlen($DataIn)
niby kiedy przyjmie to wartosc FALSE lub zero -- zwsze bedzie zwracac dlugosc $DataIn, ktora to nie zostaje modyfikowana?

i co teraz powiesz?
usercontrol
Cytat(dr_bonzo @ 2006-02-17 20:23:45)
i co teraz powiesz?

Dobra, sorry za okreslenie "lamer", ale moze ktos mi wyjasni PO CO sie wypowiadal, jesli jego wypowiedz nie miala na celu pomóc, tylko jeszcze opie* ?
Człowieku, to dział dla poczatkujacych ! Kazdy mial swoj poczatek i popelnial bledy !
-----------------
dzieki za pomoc

pozdr
dr_bonzo
Mimo to wskazal ci miejsce bledu.
crash
Skoro wg. Ciebie podanie linka do strony w manualu opisującej dokładnie jak powinno się używać pętli for nie jest pomocą to ja już nic nie wiem.

P.S. Twoja funkcja nie koduje dobrze ciągu, bo nie bierze pod uwagę pierwszego znaku (indeks znaków w ciągu zaczyna się od 0, a nie od 1).
usercontrol
Cytat
Huh smile.gif Bierzesz się za "szyfrowanie" a nie wiesz jak używać pętli for. Ciekawe...


O to chodziło.

Poprawiłem kodzik, i chyba nie koduje jak powinno:

  1. <?
  2. $CK="muahaha";
  3. $DataX="haselkyreybyi54y690uiv50692,34iv905u90yk4u9ty8ueiogyjdrhyio45uyioo";
  4. print XOREn($CK, $DataX);
  5.  
  6. function XOREn($CodeKey, $DataIn)
  7. {
  8.  
  9. for ($DataPtr=0; $DataPtr <= strlen($DataIn); $DataPtr++){
  10.  
  11. $XORValue1 = ord(substr($DataIn, $DataPtr, 1));
  12. $XORValue2 = ord(substr($CodeKey, (($DataPtr % strlen($CodeKey)) + 1), 1));
  13. $DataOut .= chr($XORValue1 ^ $XORValue2);
  14. }
  15. return $DataOut;
  16.  
  17. }
  18.  
  19. ?>


Czy coś jeszcze jest tu nie tak?

pozdrawiam
Bastion
taaa

zmien

Kod
for ($DataPtr=0; $DataPtr <= strlen($DataIn); $DataPtr++){


na

Kod
$len = strlen($DataIn);
for ($DataPtr=0; $DataPtr <= $len; $DataPtr++){


oraz

Kod
$XORValue2 = ord(substr($CodeKey, (($DataPtr % strlen($CodeKey)) + 1), 1));

na
Kod
$XORValue2 = ord(substr($CodeKey, (($DataPtr % $len) + 1), 1));


Po co petla ma wywolywac 2000x funkcje strlen w przypadku gdy ciag znakow zawiera 1000 znakow

aaa... w ogole to ja bym to zrobil tak :

  1. <?php
  2. function xor_crypt($str, $key)
  3. {
  4.  $slen = strlen($str);
  5.  $klen = strlen($key) - 1;
  6.  
  7.  $j =0; $out = '';
  8.  
  9.  for ($i = 0; $i < $slen; $i++)
  10.  {
  11. $out .= $str[$i] ^ $key[$j];
  12. ($j == $klen) ? $j = 0 : $j++;
  13.  }
  14.  return $out;
  15. }
  16.  
  17. ?>
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.