laravel - 自定义生成密钥的 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'))
);
}
解决方案
聚会迟到了,但把它贴在这里可能有一天会对某人有所帮助。如果使用 AES-256-CBC,则密钥长度应为 32 个字符,如果使用 AES-128-CBC,则密钥长度应为 16 个字符。从 vendor\laravel\framework\src\Illuminate\Encryption\Encrypter.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,请确保您的 $theOtherKey 长度为 16 个字符。
推荐阅读
- apache-kafka - 何时增加日志清理线程?
- python - (Python,Opencv)查找图像中的像素数
- django - 如何在使用 django rest 框架的简单 jwt 身份验证中验证访问令牌并在过期时将用户重定向到 refreshtoen 视图
- pyqt - PYQT 为 QTabWidget 中的每个选项卡设置不同的背景颜色
- c - 无法识别此代码的问题
- php - 排序数组连接到其他数组
- postgresql - INSERT ... RETURNING 仅在第一次插入后返回
- excel - 通过 Excel 公式在新 Outlook (Office 365) 中分离用户名和邮件地址
- java - 如何将spring boot连接到sql server management studio
- ruby-on-rails - 坚持 2FA 的 Capybara 会话