Php 解密Laravel之外的加密值

Php 解密Laravel之外的加密值,php,laravel,laravel-4,aes,Php,Laravel,Laravel 4,Aes,如何解密已使用Laravel 4 Encrypt类加密的字符串(在Laravel之外,仅使用PHP?LaravelEncrypter类使用块大小为256位的Rijndael进行加密,这是由Mcrypt PHP扩展提供的。Encrypter类使用两种简单的方法工作,encrypt()和decrypt() 下面是一个例子: <?php $secret = Crypter::encrypt('some text here'); //encrypted $decrypted_secret =

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

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

下面是一个例子:

<?php

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

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

?>

既然你在问如何“在拉威尔之外”做到这一点:

加密和解密由encrypter类完成。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的
加密机类容易发生变化。这是由于某些已修复的安全漏洞造成的。因此,要成功解密,您需要执行以下操作:

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

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

    OpenSSL有一个命令行界面,可以工作。