提问者:小点点

自定义生成密钥的Laravel加密错误


我生成了一个唯一的自定义密钥,需要使用这个密钥加密一个值。它的返回错误

唯一支持的密码是具有正确密钥长度的AES-128-CBC和AES-256-CBC。

public function test(){

        $key = $this->generateRandomKey();
        $newEncrypter = new \Illuminate\Encryption\Encrypter( $key, Config::get('app.cipher') );
        echo $encrypted = $newEncrypter->encrypt( 'hello' );
    }

    protected function generateRandomKey()
    {
       return 'base64:'.base64_encode(
           Encrypter::generateKey(Config::get('app.cipher'))
       );
    }

共2个答案

匿名用户

派对迟到了,但把它贴在这里,因为有一天可能会对某人有所帮助。如果使用AES-256-CBC,密钥应该是32个字符长,如果使用AES-128-CBC,密钥应该是16个字符长。从供应商\laravel\框架\src\照明\加密\加密. php中,您可以看到:

 public static function supported($key, $cipher)
    {
        $length = mb_strlen($key, '8bit');

        return ($cipher === 'AES-128-CBC' && $length === 16) ||
               ($cipher === 'AES-256-CBC' && $length === 32);
    }

对于使用自定义密钥进行加密/解密,您可以使用以下片段。

$theOtherKey    = "22222222222222222222222222222222"; //32 character long
$text           = 'Hello World'; //or the text that you want to encrypt.
$newEncrypter   = new \Illuminate\Encryption\Encrypter ($theOtherKey,'AES-256-CBC');
$encrypted      = $newEncrypter->encrypt($text);
echo $encrypted;

如果您更喜欢使用AES-128-CBC,请确保您的$the其他Key长度为16个字符。

匿名用户

如果我正确地阅读了API,您不应该对密钥进行base 64编码(例如您在GenerateR随机密钥中所做的)-我认为我是因为错误匹配。