我生成了一个唯一的自定义密钥,需要使用这个密钥加密一个值。它的返回错误
唯一支持的密码是具有正确密钥长度的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'))
);
}
派对迟到了,但把它贴在这里,因为有一天可能会对某人有所帮助。如果使用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随机密钥
中所做的)-我认为我是因为错误匹配。