Взгляните на mcyrpt_encrypt()
:
string mcrypt_encrypt ( string $cipher , string $key , string $data ,
string $mode [, string $iv ] )
Установите $cipher
на MCRYPT_RIJNDAEL_128
(AES-128) и $mode
на MCRYPT_MODE_CBC
.
Затем используйте base64_encode()
для генерации выхода в кодировке base-64 (то есть: что делает опция -a
).
openssl получает ключ и IV следующим образом:
Key = MD5(Password + Salt)
IV = MD5(Key + Password + Salt)
Где Salt
- 8-байтовая соль.Имея это в виду, я создал простые подпрограммы encrypt()
и decrypt()
:
function ssl_encrypt($pass, $data) {
$salt = substr(md5(mt_rand(), true), 8);
$key = md5($pass . $salt, true);
$iv = md5($key . $pass . $salt, true);
$ct = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $data,
MCRYPT_MODE_CBC, $iv);
return base64_encode('Salted__' . $salt . $ct);
}
function ssl_decrypt($pass, $data) {
$data = base64_decode($data);
$salt = substr($data, 8, 8);
$ct = substr($data, 16);
$key = md5($pass . $salt, true);
$iv = md5($key . $pass . $salt, true);
$pt = mcrypt_decrypt (MCRYPT_RIJNDAEL_128, $key, $ct,
MCRYPT_MODE_CBC, $iv);
return $pt;
}
Параметр $data
принимает строку для шифрования.Если вы хотите зашифровать файл, вам нужно получить его с помощью file_get_contents()
или аналогичного, а затем передать его функции.
Использование:
echo ssl_encrypt('super secret key', 'Hello World');
Создает что-то вроде (будет меняться каждый раз из-за случайной соли):
U2FsdGVkX18uygnq8bZYi6f62FzaeAnyB90U6v+Pyrk=