在 Laravel 之外解密加密值

2024-03-04

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


拉拉维尔Encrypter该类使用块大小为 256 位的 Rijndael 进行加密,该加密由 Mcrypt PHP 扩展提供。这Encrypter类使用两种简单的方法工作,encrypt() and 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);
    }

?>

有关文档和评论,请参阅Laravel 源代码 https://github.com/laravel/framework/blob/master/src/Illuminate/Encryption/Encrypter.php在 GitHub 上。

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Laravel 之外解密加密值 的相关文章