PHP中的OpenSSL加密
问题描述:
我加密了我在系统中用来传递URL的令牌,并且每次触发加密的令牌时都会有相同的最后2个字符。PHP中的OpenSSL加密
这里是我的代码:
<?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
我只是想在加密或删除“09”不一样。
答
你应该从你的函数,而不是$key
被返回$output
但因为这显然是一个错字可以发布,因为您的不同示例输出这里,答案是没有的OpenSSL,而是因为的第一base64编码大小。如果您的$string
超过14个字符,则会得到不同的结局。
看到这个例子:https://3v4l.org/eIMMY