PHP中的OpenSSL加密

PHP中的OpenSSL加密,php,encryption,token,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('sha25

我对我在系统中用来通过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;
}
?>

我只想删除加密中的“09”或使其不同。

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

但是,由于您的不同示例输出,这里的帖子显然有误,所以答案不是因为openssl,而是因为base64编码大小。如果您的
$string
超过14个字符,则会得到不同的结尾

请参见此示例:

eg #1
token=Z0ZkSmZhWjMzRUxTcCtxY2o1ZlFJdz09
eg #2
token=STE2b05oMVkwK3FIV0lhUkYyN0tmdz09