首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel之外解密加密值

在Laravel之外解密加密值
EN

Stack Overflow用户
提问于 2013-06-30 13:36:45
回答 2查看 10.5K关注 0票数 5

我怎样才能用Laravel 4加密类以外的Laravel 4加密类,仅用PHP解密已加密的字符串?

EN

回答 2

Stack Overflow用户

发布于 2013-06-30 15:06:12

Laravel Encrypter类使用块大小为256位的Rijndael进行加密,这是由Mcrypt扩展提供的。Encrypter类使用两个简单的方法,encrypt()decrypt()

下面是一个例子:

代码语言:javascript
复制
<?php

$secret = Crypter::encrypt('some text here'); //encrypted

$decrypted_secret = Crypter::decrypt($secret); //decrypted

?>

,因为你在问如何“在Laravel之外”做这件事:

加密和解密由encrypter类完成。Laravel消息来源是公开的,以下是相关部分:

代码语言:javascript
复制
<?php

    public function encrypt($value)
    {
        $iv = mcrypt_create_iv($this->getIvSize(), $this->getRandomizer());
        $value = base64_encode($this->padAndMcrypt($value, $iv));
        $mac = $this->hash($iv = base64_encode($iv), $value);

        return base64_encode(json_encode(compact('iv', 'value', 'mac')));
    }

    protected function padAndMcrypt($value, $iv)
    {
        $value = $this->addPadding(serialize($value));
        return mcrypt_encrypt($this->cipher, $this->key, $value, $this->mode, $iv);
    }

    public function decrypt($payload)
    {
        $payload = $this->getJsonPayload($payload);
        $value = base64_decode($payload['value']);
        $iv = base64_decode($payload['iv']);
        return unserialize($this->stripPadding($this->mcryptDecrypt($value, $iv)));
    }

    protected function mcryptDecrypt($value, $iv)
    {
        return mcrypt_decrypt($this->cipher, $this->key, $value, $this->mode, $iv);
    }

?>

有关文档和注释,请参见Laravel源代码 on GitHub。

我希望这能帮到你。

票数 3
EN

Stack Overflow用户

发布于 2015-01-17 15:14:46

Laravel的Encrypter类容易发生变化。这是由于一些安全漏洞得到了修复。因此,要成功解密,您需要执行以下操作:

  1. 获得正确的源代码,例如用于4.2.16
  2. 让它在你的机器上工作。确保您在相同的PHP环境上运行(在最新版本中使用OpenSSL扩展);
  3. 用正确的键在Encrypter中实例化类,并可能设置正确的模式和算法;
  4. 最后,调用decrypt

解密所需的所有其他参数(IV和MAC值)应包含在密文中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17390898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档