Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przesuwanie o pare znakow
Forum PHP.pl > Forum > Przedszkole
marcio
Witam chce napisac sobie prosta funckje szyfrujaca/kodujaca tekst lecz nie wiem zabardzo jak przesunac sie o kilka znakow do przodu/tylu mam taki kod:

Lecz to nic nie zwraca zmienna $haslo jest pusta a tak wywoluje:
  1. <?php
  2. szyfruj($_POST['tekst']);
  3. ?>

wiec powinno byc good ale tak nie jest sad.gif i nie wiem jak przesunac o dana ilosc znakow czy moze ktos dac jakies wskazowki??

EDIT
  1. <?php
  2. function szyfruj($co) {
  3.  
  4. $a = strlen($co);
  5.  
  6. for ($i = 0; $i <= $a; $i++) {
  7.  
  8. if(ord($co[$i]) >= 48 && ord($co[$i]) <= 57 ||
  9.  ord($co[$i]) >= 65 && ord($co[$i]) <= 90 ||
  10.  ord($co[$i]) >= 97 && ord($co[$i]) <= 122) {
  11.  
  12.  $haslo_r .= $co[$i];
  13.  $haslo = sprintf("%d", $haslo_r);
  14. }
  15. }
  16.  
  17. return $haslo;
  18. }
  19. ?>

Zwraca zawsze 0 poprostu chce zeby albo pokazywal wynik jako kod asci lub dodawal do kazdej litery np 5 czyli jak bedzie w ciagu A to ma byc F
sobstel
w tym celu najlepiej wykorzystaj już gotową funkcję str_rot13" title="Zobacz w manualu PHP" target="_manual , która implementuje algorytm rot13 (przesuwa o 13 znaków), np.

  1. <?php
  2. $zaszyfrowane = str_rot13('tekst do zaszyfrowania');
  3. ?>


jednak do prawdziwego szyfrowania używaj mcrypt" title="Zobacz w manualu PHP" target="_manual. metody oparte na przesuwaniu każdy domorosły kraker złamie w minutę.
marcio
to juz uzywam bo pisze koder w ph i mam juz md5/sha1/base64/crypt/rot13 i teraz chce zrobic taki co bedzie przeskakiwal o tyle pol ile mu sie poda w drugim argumencie ktory jeszcze musze dodac lub tylko o 5 miejsc lecz nie wiem jak to przesunac

To jak jakies pomysly??

questionmark.gifquestionmark.gifquestionmark.gif?

questionmark.gifquestionmark.gifquestionmark.gif
nowotny
Taka byłaby podstawa...
  1. <?php
  2. function szyfruj($co) {
  3. $a = strlen($co);
  4. $haslo='';
  5.  
  6. for ($i = 0; $i <= $a; $i++){
  7. if((ord($co[$i]) >= 48 && ord($co[$i]) <= 57) || (ord($co[$i]) >= 65 && ord($co[$i]) <= 90) || (ord($co[$i]) >= 97 && ord($co[$i]) <= 122)) {
  8.  
  9.  $char = chr(ord($co[$i])+5);
  10.  $haslo .= $char;  
  11. }
  12. }
  13.  
  14. return $haslo;
  15. }
  16. ?>


Teraz musisz tylko dodać sprawdzanie $char czy nie przekracza zakresów...
marcio
Czyli wszystko dobrze robilem przedtem tylko brakowalo mi tego
  1. <?php
  2. $char = chr(ord($co[$i])+5);
  3. ?>

Tylko nie rozumiem czemu trzeba najpierw zamieniac na znaki a potem do ascii dodawac 5 nie mozna dac tylko ord??

Ej mam jeszcze jedno pytanie a jak zrobic zeby odszyfrowywal??Pytam nie jestem mocny w robieniu odwrotnych funkcji a -5 nic nie zwraca
nowotny
Cytat(marcio @ 2.02.2008, 14:33:41 ) *
Czyli wszystko dobrze robilem przedtem tylko brakowalo mi tego

No nie bardzo... winksmiley.jpg

Cytat(marcio @ 2.02.2008, 14:33:41 ) *
Tylko nie rozumiem czemu trzeba najpierw zamieniac na znaki a potem do ascii dodawac 5 nie mozna dac tylko ord??

Erm... nie rozumiem pytania... :/

Cytat(marcio @ 2.02.2008, 14:33:41 ) *
Ej mam jeszcze jedno pytanie a jak zrobic zeby odszyfrowywal??Pytam nie jestem mocny w robieniu odwrotnych funkcji a -5 nic nie zwraca

SOA#1...

BTW, w pętli for zmien sobie znak... zamiast '<=' powinno być samo '<'...
marcio
OKi dzialalo tylko ze mi sie litorewka dala do zmiennej

OKi dzialalo tylko ze mi sie litorewka dala do zmiennej
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.