Начните с этого: http://www.ibm.com/developerworks/opensource/library/os-php-encrypt/
После этого посмотрите ответ Паскаля МАРТИНА в Как зашифровать строку в PHP?
Базовая реализация openssl, которую я использовал раньше:
class MyEncryption
{
public $pubkey = '...public key here...';
public $privkey = '...private key here...';
public function encrypt($data)
{
if (openssl_public_encrypt($data, $encrypted, $this->pubkey))
$data = base64_encode($encrypted);
else
throw new Exception('Unable to encrypt data. Perhaps it is bigger than the key size?');
return $data;
}
public function decrypt($data)
{
if (openssl_private_decrypt(base64_decode($data), $decrypted, $this->privkey))
$data = $decrypted;
else
$data = '';
return $data;
}
}
Вам потребуется сгенерировать пару ключей RSA. Информацию о том, как это сделать, смотрите здесь. Хранение закрытого ключа в самом файле - плохая идея. Это просто пример. В идеале вы хотите, чтобы пользователь предоставлял закрытый ключ во время расшифровки
Полагаю, вы имели в виду шифрование симметричным ключом. mcrypt действительно поддерживает несколько алгоритмов (например, AES, Tripel DES). Но есть одна загвоздка, он не поддерживает алгоритм вставки, поэтому вы не сможете вернуть исходную длину. У вас есть 2 варианта, как обойти эту проблему:
Добавьте поле длины перед чистым текстом. Скажем, использовать первые 4 байта в качестве длины.
Сделать PKCS#5 padding самостоятельно. Примеры кода есть на этой странице: http://www.php.net/manual/en/function.mcrypt-encrypt.php