Codeigniter 4如何检测解密时的“Decrypting: authentication failed”错误
解决CodeIgniter 4加密服务解密错误检测方案
核心实现逻辑为通过try-catch块捕获CI4加密类抛出的专属异常,匹配目标错误信息后触发404即可。
实现步骤
- 首先在代码头部引入加密异常类:
use CodeIgniter\Encryption\Exceptions\EncryptionException; - 包裹解密逻辑,异常分支触发404
完整可运行代码
use CodeIgniter\Encryption\Exceptions\EncryptionException; // 初始化加密服务 $enc = \Config\Services::encrypter(); // 待解密的加密字符串,可替换为你实际获取到的参数 $encryptedStr = "1c68ef9159b..."; try { // 可选前置校验:判断加密串是否为合法十六进制格式 $binStr = hex2bin($encryptedStr); if ($binStr === false) { throw new \CodeIgniter\Exceptions\PageNotFoundException(); } // 执行解密 $decryptedData = $enc->decrypt($binStr); // 解密成功,后续业务逻辑写在这里 print_r($decryptedData); } catch (EncryptionException $e) { // 匹配解密认证失败的错误场景 if (strpos($e->getMessage(), 'Decrypting: authentication failed') !== false) { // 调用你已掌握的404触发逻辑,下方为CI4原生404方法示例 throw new \CodeIgniter\Exceptions\PageNotFoundException(); } // 其他加密类异常可自行处理,例如写日志后抛出 log_message('error', '加密服务异常:' . $e->getMessage()); throw $e; }
补充说明
代码中用
strpos做错误信息匹配是为了兼容PHP7及以上所有版本,如果你使用PHP8.0+,可以替换为语义更清晰的str_contains($e->getMessage(), 'Decrypting: authentication failed')。
CI4加密服务在校验解密内容的签名失败时(加密串被篡改、密钥不匹配、加密串损坏等场景),都会抛出对应错误信息的EncryptionException,该方案可精准覆盖你需要识别的错误场景。
内容的提问来源于stack exchange,提问作者Alessandro Mian
相关产品推荐
相关产品推荐

