CodeIgniter v4.1.4 AES加密createKey方法未生成密钥报错问题咨询
问题原因
你对Encryption::createKey()的使用方式和配置赋值逻辑存在两处错误:
- 你在配置文件中定义的
$key = \CodeIgniter\Encryption\Encryption::createKey();是局部变量,CodeIgniter读取加密密钥时取的是Encryption配置类的公共属性$key,你没有将生成的密钥赋值给对应属性,系统自然读取不到有效密钥。 createKey()方法作用是一次性生成符合要求的二进制密钥,不能放在配置文件中动态调用:每次请求都会生成新密钥,会导致之前加密的内容无法解密,且二进制密钥不能直接写入配置文件存储。
正确配置步骤
- 先生成可用的base64编码密钥:你可以在任意控制器临时加一行代码,访问一次即可得到密钥字符串:
echo base64_encode(\CodeIgniter\Encryption\Encryption::createKey());
- 打开
app/Config/Encryption.php文件,修改配置类的公共属性,把上一步得到的密钥填进去,删除你之前自己加的局部$key变量代码:
class Encryption extends BaseConfig { // 粘贴你生成的密钥到引号内 public $key = '你生成的base64编码密钥'; public $driver = 'AES'; // 其他配置保持默认即可,和你使用的AES位数匹配就行 public $blockSize = 256; public $digest = 'SHA512'; }
- 配置完成后重启服务再测试即可,报错会直接消失。
注意事项
密钥生成后固定存储即可,不要在生产环境动态生成密钥,会导致所有历史加密数据无法正常解密。
内容的提问来源于stack exchange,提问作者Reza Angkasa
相关产品推荐
相关产品推荐

