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