Codeigniter 4:如何检测"Decrypting: authentication failed"

Codeigniter 4: How to detect "Decrypting: authentication failed"

我在使用 Codeigniter 4 和加密服务时遇到了问题。 一切正常,我可以毫无问题地加密和解密,但我想检测加密字符串何时出现错误“解密:身份验证失败。”

基本上我想做的就是:

  1. 获取加密字符串
  2. 解密字符串:如果解密成功则继续执行脚本,否则给出404错误

这是我的测试代码,也许它有助于解释我的问题

$ct1 是正确的加密字符串,$ct2 是相同的字符串但第一个字符改变了,只是为了模拟错误,第一个正确解密,第二个给出错误,我想检测这个错误并显示 404 页面(我知道如何显示 404 页面,我只需要一种检测错误的方法)。

$enc = \Config\Services::encrypter();

$ct1 = "9c68ef9159b..."; //The string is very long, I don't think is necessary to write it all
$ct2 = "1c68ef9159b...";

print_r($enc->decrypt(hex2bin($ct1)));
print_r($enc->decrypt(hex2bin($ct2)));

在此先感谢所有愿意帮助我的人。

您可以为解密创建一个函数,如下所示:

public function decrypt_token($ct1){
    try{
        $enc->decrypt(hex2bin($ct1))
    } catch (Exception $e) {
        echo 'Caught exception: ',  $e->getMessage(), "\n";
       // or
      header('Location: http://www.example.com/404');
    }
}

更多内容请阅读here

仅作记录,这是在 Codeigniter 4 中使用的完整代码。

public function testEncryption()
{
    $enc = \Config\Services::encrypter();
    
    $encrypted_string = "9c68ef9159...";
    
    try
    {
        // print the encrypted string
        echo $enc->decrypt(hex2bin($encrypted_string));
    }
    catch(\Exception $e)
    {
        // or if encrypted_string is not valid then show 404 page or do whatever you want
        return view('errors/html/error_404');
    }
}