繁体   English   中英

在Laravel之外解密加密值

[英]Decrypt encrypted value outside of Laravel

我如何解密使用Laravel之外的Laravel 4 Encrypt类加密的字符串,仅使用PHP?

Laravel Encrypter类使用Rijndael,块大小为256位,用于加密,由Mcrypt PHP扩展提供。 Encrypter类使用两种简单方法: encrypt()decrypt()

以下示例:

<?php

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

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

?>

既然你在“Laravel之外”询问如何做到这一点:

加密和解密由加密器类完成。 Laravel来源是公开的,这里是相关部分:

<?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);
    }

?>

有关文档和注释,请参阅GitHub上的Laravel源代码

我希望这有帮助。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM