ďťż

[PHP] Szyfrowanie Prosty przykład szyfrowania w php

       

Podstrony


telcocafe

Witam witam
Napisałem taki prosty "system szyfrowania". Ma być prosty i gładki :)
<?php if (isset($_GET['szy']) && !isset($_GET['od'])) { $zamien = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $na = array( '1', '2', '3', '4', '5', '6', '7', '8', '9', '@', '#', '$', '%', '^', '&', '*', '=', '+', ';', ':', '?', '>', '<', '~', '|', '!'); $ciag = strtolower($_GET['pole']); $zamienione = str_replace($zamien, $na, $ciag); echo("Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione</b></font>"); } else { $na2 = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $zamien2 = array( '1', '2', '3', '4', '5', '6', '7', '8', '9', '@', '#', '$', '%', '^', '&', '*', '=', '+', ';', ':', '?', '>', '<', '~', '|', '!'); $ciag2 = strtolower($_GET['pole']); $zamienione2 = str_replace($zamien2, $na2, $ciag2); echo("Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione2</b></font>"); } ?>
Teraz muszę wymyślić drugi system szyfrowania (nieskomplikowany, prosty) który byłby od biedy podobny do ostatniego. Macie jakieś pomysły na nowy skrypt?
(nie chodzi mi o gotowe funkcje md5 itp tylko o własny pomysł)



Koduj na hexy, mnóż przez liczbę kolejności litery, dodawaj swoje znaki, przerabiaj na bina, a później znów na deca xD
Jak ci się nudzi, xoruj... metod jest wiele, wystarczy przejrzeć 4p, żeby znaleźć najróżniejsze pomysły :)

edit: te publikowane w necie zazwyczaj są proste ;)
Użytkownik DJ_ProG edytował ten post 14 październik 2007, 21:21
Dzięki. Znalazłem na 4p proste szyfrowanie. Wywaliłem zbędne funkcje konwertujące i oto kod:
<?php function koduj ( $str ) { $temp = ''; for ( $i = 0; $i < strlen( $str ); $i++) { $temp = ord( $str[$i] ); $result .= $temp; } return $result; } function dekoduj ( $str ) { $temp = ''; for ( $i = 0; $i < strlen( $str ); $i++) { $temp = chr( $temp ); $result .= $temp; } return $result; } $tekst = 'daria'; $zakodowany_tekst = koduj( $tekst ); $odkodowany_tekst = dekoduj( $zakodowany_tekst ); echo $tekst . '<br><br>'; echo $zakodowany_tekst . '<br>'; echo $odkodowany_tekst; ?>

Co może być źle? W końcu dałem tylko chr() i ord(), ale skrypt się rozkłada na rozszyfrowaniu (nic nie wyświetla, nie dekoduje tekstu. przy kodowaniu jest ok). :| Potrzebuję najprostszego przykładu jaki może być :D
Użytkownik sauron edytował ten post 14 październik 2007, 21:42
chr($str[$i]) i będzie działać :)



Lipa :)
Wywala mi znaki zapytania ;]

tekst (tekst do zaszyfrowania/odszyfrowania)

116101107115116 (zaszyfrowane)
�� (odszyfrowane)


Ach, operacje tablicowe na stringach nie są możliwe na integerach :P Sprawdź dokładnie,czy to jest string. Np. wstaw przed zmienną bądź wywołaniem funkcji koduj (string).

Dobra :P
Znalazłem coś ciekawszego:
$x='Daria'; $y=preg_replace('/(.)/e', 'chr(ord(\'$1\')+3)', $x);

Może mi ktoś wytłumaczyć dokładnie po kolei jakie będą zachodzić 'procesy' w zmiennej $y?

Rozumiem o co chodzi w chr() i ord(), natomiast możecie mi wytłumaczyć na 'chłopski rozum' co jest z tym:
/(.)/e

Patrzyłem na manual i inne strony, ale nadal tego nie kumam. :\

Przełącznik e oznacza,że wynik będzie wysyłany do funkcji. Natomiast dot to jest dowolny znak. Nawiasy oraz slashe mam nadzieję,że wiesz do czego służą :) Nie rozumiem tylko tego,w jaki sposób to przesuwa, ale dajmy na to, iż skrypt działa w obie strony: funkcja ord zamienia znak (chyba że jestem niedoinformowany) na kod ASCII. +3 oznacza przesunięcie tego kodu o 3 miejsca do przodu. Funkcja chr zamienia wartość liczbową znaku ASCII na znak literowy. To wytłumaczenie dla osób,które nie wiedzą :)
BTW Sprawdziłeś czy działa? Jeżeli tak to wynikiem powinien być ciąg Gduld (jeżeli dobrze liczę :P ).
Użytkownik andrzej_aa edytował ten post 15 październik 2007, 12:43
Ok :P
Już w miarę kapuję. Ale nadal nie rozumiem o co chodzi z tyn e... Jak będzie wysyłany do funkcji? Co to da?
Oraz... o co chodzi z tą zmienną $1??
chr(ord(\'$1\')+1)

Widzę, że ten $1 rozbija kolejno litery:

chr(ord('D')+1)chr(ord('a')+1)chr(ord('r')+1)chr(ord('i' )+1)chr(ord('a')+1)

Ale jakim cudem akurat zmienna $1 to rozbija? A dlaczego np. $2 już nie rozwala wyrazów?

// pełny kod:
$x='Daria'; $y=preg_replace('/(.)/e', 'chr(ord(\'$1\')+1)', $x); $z=preg_replace('/(.)/e', 'chr(ord(\'$1\')-1)', $y); echo 'Przed szyfrowaniem: '.$x.'<br>Po szyfrowaniu: '.$y.'<br>Po odszyfrowaniu: '.$z;
Użytkownik sauron edytował ten post 15 październik 2007, 13:51
Ach,nie zauważyłem :) Dobra,czegoś się nauczyłem i tłumaczę nauczycielowi :D
Tutaj jest opis preg_replace jeżeli jeszcze nie zajrzałeś. Szukałem jeszcze przełączników do pregów,ale nie mogę znaleźć . . .
Do rzeczy. $1 oznacza rozbicie znalezionej frazy do tablicy - dlatego działają funkcje,które używasz. Jest jeszcze zapis \1,który zawiera w sobie string,ale to nie ta bajka. Dlaczego $1, a nie $2? Wytłumaczenie jest proste - cześć to odwołanie do danego szukanego ciągu. Mianowicie: w pierwszym argumencie funkcji preg_replace masz zapis (.), a to jest fraza szukana (zwracana będzie zawartość nawiasu, czyli dowolny znak poza znakiem nowej linii). Rozszerzając gdybyś miał poddać np. testujemy funkcje i wykorzystał zapis (.)[ ](.) w pierwszym argumencie funkcji to w drugim argumencie już byś mógł użyć $2 - bo są dwa nawiasy.
Wiem,nie mam daru do tłumaczenia,ale jeżeli nie rozumiesz to zajrzyj do manuala.
Użytkownik andrzej_aa edytował ten post 15 październik 2007, 18:34
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.