Codeigniter 4:无法解密加密的 post 数据
Codeigniter 4: failed to decrypt encrypted post data
对不起我的英语
我是 Codeigniter 4 的新手。我尝试从加密的 post 请求中解密数据。我在视图中成功加密了我的数据,但无法在 post 之后用 javascript 在我的控制器中再次解密。这是我的代码
我的控制器
<?php namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\Store_MDL;
class Home extends BaseController
{
protected $ProductModel;
protected $request;protected $session;protected $encrypt;
public function __construct() {
$this->ProductModel = new Store_MDL();
$this->request = \Config\Services::request();
$this->encrypt = \Config\Services::encrypter();
$this->session = \Config\Services::session();
$this->session->start();
}
public function index()
{
$data['encrypter'] = $this->encrypt;
return view('home_page', $data);
}
public function encthis()
{
$val = $_POST['str'];
$encrypters = $this->encrypt;
//$ciphertext = $encrypters->encrypt('My secret message');
echo $encrypters->decrypt($val);
//echo $val;
return view('product/product-v');
}
}
这是我的看法home_page.php
<?php $n=0; foreach ($product as $rows){
$n++;
//echo count($rows);
if($n < count($rows)){
$dev = '<div class="divider mb-3 mt-n2"></div>';
}else{$dev = '';}
if($n % 2 == 0){
echo '<a href="#" value = "'.base_url().'/home/encthis" data-v="'.$encrypter->encrypt($rows['prno']).'" class = "n-link"><div class="row">
<div class="col-6">
<h1 class="font-20 mb-0 line-height-l">'.$rows['prname'].'</h1>
<p class="mb-3">
'.$rows['prdescription'].'
</p>
<h2 class="font-16 mb-0">Rp. '.$rows['prprice'].'</h2>
</div>
<div class="col-6">
<img src="'.base_url().'/public/uploads/'.$rows['prpath'].'/'.$rows['primage'].'" class="img-fluid rounded-circle shadow-xl">
</div>
</div></a>'.$dev;
}else{
echo '<a href="#" value = "'.base_url().'/home/encthis" data-v="'.$encrypter->encrypt($rows['prno']).'" class = "n-link"><div class="row">
<div class="col-6">
<img src="'.base_url().'/public/uploads/'.$rows['prpath'].'/'.$rows['primage'].'" class="img-fluid rounded-circle shadow-xl">
</div>
<div class="col-6">
<h1 class="font-18 mb-0 line-height-l">'.$rows['prname'].'</h1>
<p class="mb-3">
'.$rows['prdescription'].'
</p>
<h2 class="font-16 mb-0">Rp. '.$rows['prprice'].'</h2>
</div>
</div></a>'.$dev;
}
} ?>
比这里我的脚本
<script>
$('.n-link').on('click', function () {
var link = $(this).attr('value');
var pos = $(this).attr('data-v');
$.post(link, { str:pos})
.done(function(data) {
document.getElementById("context").innerHTML = data;
});
});
</script>
我总是收到通知 500(内部服务器错误)。
经过几个小时的努力,我找到了一些线索,
只是改变
$encrypter->encrypt($rows['prno']);
base64_encode($encrypter->encrypt($rows['prno']));
并且在控制器中,
变化
$encrypters->decrypt($val);
$encrypters->decrypt(base64_decode($val));
希望有用
对不起我的英语 我是 Codeigniter 4 的新手。我尝试从加密的 post 请求中解密数据。我在视图中成功加密了我的数据,但无法在 post 之后用 javascript 在我的控制器中再次解密。这是我的代码 我的控制器
<?php namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\Store_MDL;
class Home extends BaseController
{
protected $ProductModel;
protected $request;protected $session;protected $encrypt;
public function __construct() {
$this->ProductModel = new Store_MDL();
$this->request = \Config\Services::request();
$this->encrypt = \Config\Services::encrypter();
$this->session = \Config\Services::session();
$this->session->start();
}
public function index()
{
$data['encrypter'] = $this->encrypt;
return view('home_page', $data);
}
public function encthis()
{
$val = $_POST['str'];
$encrypters = $this->encrypt;
//$ciphertext = $encrypters->encrypt('My secret message');
echo $encrypters->decrypt($val);
//echo $val;
return view('product/product-v');
}
}
这是我的看法home_page.php
<?php $n=0; foreach ($product as $rows){
$n++;
//echo count($rows);
if($n < count($rows)){
$dev = '<div class="divider mb-3 mt-n2"></div>';
}else{$dev = '';}
if($n % 2 == 0){
echo '<a href="#" value = "'.base_url().'/home/encthis" data-v="'.$encrypter->encrypt($rows['prno']).'" class = "n-link"><div class="row">
<div class="col-6">
<h1 class="font-20 mb-0 line-height-l">'.$rows['prname'].'</h1>
<p class="mb-3">
'.$rows['prdescription'].'
</p>
<h2 class="font-16 mb-0">Rp. '.$rows['prprice'].'</h2>
</div>
<div class="col-6">
<img src="'.base_url().'/public/uploads/'.$rows['prpath'].'/'.$rows['primage'].'" class="img-fluid rounded-circle shadow-xl">
</div>
</div></a>'.$dev;
}else{
echo '<a href="#" value = "'.base_url().'/home/encthis" data-v="'.$encrypter->encrypt($rows['prno']).'" class = "n-link"><div class="row">
<div class="col-6">
<img src="'.base_url().'/public/uploads/'.$rows['prpath'].'/'.$rows['primage'].'" class="img-fluid rounded-circle shadow-xl">
</div>
<div class="col-6">
<h1 class="font-18 mb-0 line-height-l">'.$rows['prname'].'</h1>
<p class="mb-3">
'.$rows['prdescription'].'
</p>
<h2 class="font-16 mb-0">Rp. '.$rows['prprice'].'</h2>
</div>
</div></a>'.$dev;
}
} ?>
比这里我的脚本
<script>
$('.n-link').on('click', function () {
var link = $(this).attr('value');
var pos = $(this).attr('data-v');
$.post(link, { str:pos})
.done(function(data) {
document.getElementById("context").innerHTML = data;
});
});
</script>
我总是收到通知 500(内部服务器错误)。
经过几个小时的努力,我找到了一些线索, 只是改变
$encrypter->encrypt($rows['prno']);
base64_encode($encrypter->encrypt($rows['prno']));
并且在控制器中, 变化
$encrypters->decrypt($val);
$encrypters->decrypt(base64_decode($val));
希望有用