Oto fragment opisu funkcji mcrypt, których używam. Używają one mcrypt_generic
i mdecrypt_generic
, które powinny być używane zgodnie z PHP manual.
function encrypt($key, $data){
$b = mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$enc = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($enc), MCRYPT_DEV_URANDOM);
mcrypt_generic_init($enc, md5($key), $iv);
// PKCS7 Padding from: https://gist.github.com/1077723
$dataPad = $b-(strlen($data)%$b);
$data .= str_repeat(chr($dataPad), $dataPad);
$encrypted_data = mcrypt_generic($enc, $data);
mcrypt_generic_deinit($enc);
mcrypt_module_close($enc);
return array(
'data' => base64_encode($encrypted_data),
'iv' => base64_encode($iv)
);
}
function decrypt($key, $iv, $encryptedData){
$iv = base64_decode($iv);
$enc = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($enc, md5($key), $iv);
$encryptedData = base64_decode($encryptedData);
$data = mdecrypt_generic($enc, $encryptedData);
mcrypt_generic_deinit($enc);
mcrypt_module_close($enc);
// PKCS7 Padding from: https://gist.github.com/1077723
$dataPad = ord($data[strlen($data)-1]);
return substr($data, 0, -$dataPad);
}
nie wiem zbyt wiele o mcrypt
albo, więc po prostu trochę posiekany je razem. I md5
klawisz, więc zawsze jest to 32 znaki (maksymalna długość klucza), a ja losowo obliczam "wektor inicjujący".
Lepiej jest używać , ponieważ możesz mieć ciągi, które kończą się białą przestrzenią (ponieważ trim
to usunie), szyfrowanie jest również wydajniejsze, gdy ciąg ma określoną długość.
Używam tutaj AES 256 (MCRYPT_RIJNDAEL_256), ale AES 192 (MCRYPT_RIJNDAEL_192) również by działał.
Demo: http://ideone.com/WA5Tk
Zastanawiam się tylko, czy słyszeliście jakieś opinie o sile tych funkcji. Myślę, że wyglądają dobrze, mogą nawet używać ich samemu ... ale to jest trochę ponad mną, szczerze mówiąc ... – Shackrock
Napisałem je sam po przeszukaniu i znalezieniu innych (podobnych) funkcji. Wydają się być silni, nie do końca pewni, jak silni, szczerze mówiąc. –
Więc musimy przechowywać IV, aby odszyfrować dane? – xendi