我已经加密了我在我的系统中使用的令牌以通过URL,并且每次触发加密令牌时始终使用相同的最后2个字符。
这是我的代码:
<?php
function encrypt($string)
{
$output = false;
$encrypt_method = "AES-256-CBC";
$secret_key = 'ExampleKey';
$secret_iv = 'ExampleIv';
// hash
$key = hash('sha256', $secret_key);
$iv = substr(hash('sha256', $secret_iv), 0, 16);
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
return $key;
}
?>
令牌结果总是相同的最后2个字符,这里是
eg #1
token=Z0ZkSmZhWjMzRUxTcCtxY2o1ZlFJdz09
eg #2
token=STE2b05oMVkwK3FIV0lhUkYyN0tmdz09
我只想删除&#34; 09&#34;在加密或不同。
答案 0 :(得分:1)
首先,您应该从函数返回$output
而不是$key
但是,由于你的不同示例输出,这显然是在这里发布的拼写错误,答案不是因为openssl,而是因为base64编码大小。如果您的$string
超过14个字符,那么您将获得不同的结尾。
请参阅此示例:https://3v4l.org/eIMMY