Prowadze firme i uzywam LMS, ale ostanio z racji prowadzonej dzialalnosci
trzeba zglosic sie do ABW (Agencja Bezpieczenstwa Wewnetrzego) i wypelnic
ankiete bezpieczenstwa itp. Problem polega na tym, ze w przypadku wlamania
sie do serwera, lub uzystanie hasla do LMS'a osoba postronna otrzymuje pelen
wykaz wszytskich uzytkownikow (abonentow) wraz z danymi podlegajacymi
ochoronie danych osobowych.
U mnie sam LMS jest chroniony certyfikatem i odpowiednimi zabezpieczeniami
ktore oferuje sam Apache, ale niestety dane w bazie sa plain-text i tego nie
moge bez wiekszej ingerencji w kod zrodlowy zakodowac.
Pytanie kierowane do programistów:
Czy uda sie zakodowac dane wysyłane on-line do i z bazy, najprostrzym kodem
(chociazby xor) lub wykorzystujac ponizszy kod by dane w samej bazie nie
byly w postaci zakodowanej, zas wyswietlane na stonach WWW byly czytelne?
WRaq
Moze podam gotowe rozwiazanie o bardzo mocnym kodowaniu danych.
definie('LIB_CRYPT_PASSWORD', 'Tu wpisujemy unikalne haslo do kodowania
swoich danych')
//==========================================================================
===
function lib_crypt_hex2bin($data) {
$out = '';
$ile = strlen($data);
for ($i=0; $i<$ile; $i+=2) {
$out .= pack("C", hexdec(substr($data, $i, 2)) );
}
return $out;
}
//==========================================================================
===
function lib_crypt_crypt_key_MD5($txt) {
//global LIB_CRYPT_PASSWORD;
if (!defined('LIB_CRYPT_PASSWORD')) defined('LIB_CRYPT_PASSWORD',
"DefaultVeryHardPassword");
$encrypt_key = md5(LIB_CRYPT_PASSWORD);
$ctr=0; $out = "";
$ile=strlen($txt);
for ($i=0; $i<$ile; $i++) {
if ($ctr == strlen($encrypt_key)) $ctr=0;
$out.= substr($txt, $i, 1) ^ substr($encrypt_key, $ctr, 1);
$ctr++;
}
return $out;
}
//==========================================================================
===
function lib_crypt_decodeMD5($bin) {
$txt = lib_crypt_crypt_key_MD5( lib_crypt_hex2bin ($bin) );
$tmp = '';
$ile=strlen($txt);
for ($i=0;$i<$ile;$i++) {
$md5 = substr($txt, $i, 1);
$i++;
$tmp.= (substr($txt, $i, 1) ^ $md5);
}
return $tmp;
}
//==========================================================================
===
function lib_crypt_encodeMD5( $bin ) {
srand( (double) microtime() * 1000000 );
$encrypt_key = md5( rand( 0, 32000 ) );
$ctr = 0; $tmp = '';
$ile=strlen( $bin );
for ($i=0;$i<$ile;$i++) {
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($encrypt_key,$ctr,1) . (substr($bin,$i,1) ^
substr($encrypt_key,$ctr,1));
$ctr++;
}
return bin2hex(lib_crypt_crypt_key_MD5($tmp));
}
//==========================================================================
===
//funkcja kodujaca zwraca 4x wiekszy ciag znakow niz wejsciowy lub blob bez
uzycia funkcji bin2hex !!!
function lib_crypt_encrypt($txt) {
srand( (double) microtime() * 1000000 );
$encrypt_key = md5( rand(0, 32000) );
$ctr = 0; $tmp = '';
$ile=strlen($txt);
for ($i=0; $i<$ile; $i++) {
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($encrypt_key,$ctr,1) . (substr($txt,$i,1) ^
substr($encrypt_key,$ctr,1));
$ctr++;
}
return bin2hex(lib_crypt_crypt_key_MD5($tmp));
}
//==========================================================================
===
//po zdekodowaniu otrzymujemy 4x mniejszy tekst
function crypt_decrypt($txt) {
$txt = lib_crypt_crypt_key_MD5( lib_crypt_hex2bin($txt) );
$out = '';
$ile = strlen($txt);
for ($i=0; $i<$ile; $i++) {
$md5 = substr($txt, $i, 1);
$i++;
$out.= (substr($txt, $i, 1) ^ $md5);
}
return $out;
}
//==========================================================================
===
-----------
WRaq