Использование openssl с платформой Kohana 3.0, возвращающей ошибку - PullRequest
0 голосов
/ 14 июля 2010

Код для моего контроллера шифрования показан ниже. Это прекрасно работает в отдельной рабочей директории от моей установки kohana.

class Controller_Crypt extends Controller_Home
{
    public static function Encrypt_This($sensitive)
    {
    //file path must be relative to directory, also derp.
        $pubkey = openssl_pkey_get_public('file://' . URL::site('../../private/public');
openssl_public_encrypt($sensitive, $cipher, $pubkey);
    return base64_encode($cipher);  
    return $cipher;
    }
    public static function Decrypt_This($cipher, $pass)
    {
     $cipher = base64_decode($cipher);
        //file path must be relative to directory, also derp.
    $prkey = 'file://' . URL::site('../../private/private');
    $privatekey = openssl_pkey_get_private($prkey, $pass);
    openssl_private_decrypt($cipher, $sensitive, $privatekey);

    return $sensitive;
    }
}

Хотя, по какой-то причине я не понимаю, я получаю эту ошибку:

ErrorException [ Warning ]: openssl_private_decrypt() [function.openssl-private-decrypt]: key parameter is not a valid private key

Еще раз я проверил этот код отдельно от приложения kohana, и он отлично работает, расшифровывая $ cipher.

Я ни в коем случае не эксперт по использованию openssl, поэтому, если кто-нибудь знает, в чем здесь проблема, и может просветить меня, я был бы очень признателен.

Ответы [ 2 ]

0 голосов
/ 06 августа 2010

Пиксель имеет правильный диагноз.В итоге вы захотите что-то вроде этого:

openssl_pkey_get_public('file://' .APPPATH. 'private/public');

Константы пути, подобные этому, определены в index.php.

0 голосов
/ 14 июля 2010

После прочтения документации по openssl_pkey_get_private оказывается, что вам необходимо указать полный (абсолютный) путь.

Использование URL::site добавит http://, и вы получите:

file://http://localhost/../../private/private

, что недействительно. Я предполагаю, что это приведет к сбою вашего следующего вызова функции. Решение было бы либо

  1. Загрузите закрытый ключ в строку и передайте его или
  2. Используйте функцию типа realpath , чтобы получить абсолютный путь.

PS: не забывайте принимать правильные ответы, в противном случае вы получите более низкий уровень ответов в будущем.

...