我尝试在 php 中实现 Crypt :: encrypt 功能,此代码在此处:
$key = "ygXa6pBJOWSAClY/J6SSVTjvJpMIiPAENiTMjBrcOGw=";
$iv = random_bytes(16);
$value = \openssl_encrypt(serialize('123456'), 'AES-256-CBC', $key, 0, $iv);
bIv = base64_encode($iv);
$mac = hash_hmac('sha256', $bIv.$value, $key);
$c = ['iv'=>$bIv,'value'=>$value,'mac'=>$mac];
$json = json_encode($c);
$b = base64_encode($json);
但结果是错误的
我想我应该在 openssl_encrypt 功能中设置之前在$ key上执行一些操作。
请帮忙。
谢谢。
答案 0 :(得分:1)
<强>解决:强>
我们可以像这样实现这个方法:
$text = '123456';
$key = "ygXa6pBJOWSAClY/CFEdOTjvJpMIiPAMQiTMjBrcOGw=";
$key = (string)base64_decode($key);
$iv = random_bytes(16);
$value = \openssl_encrypt(serialize($text), 'AES-256-CBC', $key, 0, $iv);
$bIv = base64_encode($iv);
$mac = hash_hmac('sha256', $bIv.$value, $key);
$c_arr = ['iv'=>$bIv,'value'=>$value,'mac'=>$mac];
$json = json_encode($c_arr);
$crypted = base64_encode($json);
echo $crypted;
这项工作对我而言
享受:)
成功
答案 1 :(得分:0)
以下是直接来自overload的实现。
$iv
$this->key
应与源$this->cipher
是您在.env文件中设置的加密密钥,以b64编码 $key
应该是您在laravel配置中配置的并与您的密钥长度兼容的。在您的示例中,您已将$key
设置为“base64:” - 字符串后面的值,即而不是键。在传递密钥之前,您需要使用base64对密钥进行编码。
ygXa6pBJOWSAClY/J6SSVTjvJpMIiPAENiTMjBrcOGw=
对eWdYYTZwQkpPV1NBQ2xZL0o2U1NWVGp2SnBNSWlQQUVOaVRNakJyY09Hdz0K
的base64编码SELECT DATE(created_at) AS date_visited, page_id, COUNT(1) AS visits
FROM your_table_name
GROUP BY DATE(created_at), page_id
,_this