OpenSSL在PHP中加密

时间:2017-09-05 09:54:22

标签: php encryption token

我已经加密了我在我的系统中使用的令牌以通过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;在加密或不同。

1 个答案:

答案 0 :(得分:1)

首先,您应该从函数返回$output而不是$key

但是,由于你的不同示例输出,这显然是在这里发布的拼写错误,答案不是因为openssl,而是因为base64编码大小。如果您的$string超过14个字符,那么您将获得不同的结尾。

请参阅此示例:https://3v4l.org/eIMMY