Symetryczne szyfrowanie ścieżki do pliku i funkcja date

0

W necie znalazłem jakiś prosty kod do zakodowania linków w których chce umieścić ścieżkę do katalogu. Oto moje testowe pliki

Plik kodujący link

function encryptlink($pure_string, $encryption_key) {
		$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
		$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
		$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
    return $encrypted_string;
	}

$katalog = './katalog';
$kod = $katalog;
//$kod = urlencode(encryptlink($katalog, 'discopolo'));

echo '<a href="decrypt.php?var='.$kod.'">KLIKNIJ</a>'; 

Plik dekodujący link i otwierający katalog

function decryptlink($encrypted_string, $encryption_key) {
		$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
		$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
		$decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
		return $decrypted_string;
	}
	
	$plik = $_REQUEST['var'].'/'.date("Y").'.inc';
	//$plik = decryptlink(urldecode($_REQUEST['var']),'discopolo').'/'.date("Y").'.inc';
	echo $plik;
	include ($plik);
	echo '<br />'.$zmienna; 

Plik który ma być otwarty

$zmienna = 'Napis ktory powinien sie pojawic po wczytaniu pliku'; 

Bez kodowania, czyli tak jak teraz wszystko działa ok. Natomiast wystarczy włączyć kodowanie, czyli od komentować zakomentowane linie żeby się posypało. Oczywiście widać że zmienna $plik jest w obu przypadkach taka sama. Więc chyba to nie jest problem z funkcjami szyfrującymi ani z funkcją date() jak wcześniej przypuszczałem. Robiłem też utf8_encode($plik) bo myslałem że coś z kodowaniem wynikowego stringu może być nie tak.

Za chiny ludowe nie wiem o co chodzi.

0

Doszedłem w końcu sam. Sprawdziłem długość łańcucha przed i po zaszyfrowaniu za pomocą strlen(). Okazało się że pierwszy prawidłowo ma 9 znaków a drugi 16. Użyłem trim($plik,"\0") aby wykasować znaki NULL.

Jednak nadal nie jest ok bo w zależności od podanego stringu algorytm działa albo fałszuje kod. Pewnie to związane z kodowaniem znaków specjalnych takich jak spacja itp. Chyba muszę poszukać lepszego algorytmu.

//EDYCJA
Proste enkodowanie w funkcji szyfrującej ...

return strtr(base64_encode($encrypted_string), '+/=', '-_,');

i analogiczny kod na samym początku funkcji deszyfrującej załatwiło sprawę. Oczywiście urlencode/decode stało się niepotrzebne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1