Php 使用带有Kohana 3.0框架的openssl返回错误

Php 使用带有Kohana 3.0框架的openssl返回错误,php,openssl,kohana,Php,Openssl,Kohana,我的加密控制器的代码如下所示。这在my 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('

我的加密控制器的代码如下所示。这在my 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的专家,因此如果有人知道这里的问题所在并能给我一些启示,我将不胜感激。

通过阅读相关文档,您似乎需要指定完整(绝对)路径

使用
URL::site
会附加
http://
,因此您会得到:

file://http://localhost/../../private/private
这是无效的。我想这会导致下一个函数调用失败。解决办法是

  • 将私钥加载到字符串中并传递该字符串或
  • 使用类似于获取绝对路径的函数

  • PS:别忘了接受正确的答案,否则你将来的回复率会更低。

    Pixel有正确的诊断。你最终会想要这样的东西:

    openssl\u pkey\u get\u public('file://'.APPPATH.'private/public')

    像这样的路径常量在
    index.php
    中定义