【问题标题】:OpenSSL encrypt in PHPPHP中的OpenSSL加密
【发布时间】:2017-09-05 09:54:22
【问题描述】:

我加密了我在系统中用来传递 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;
}
?>

token 结果总是相同的最后 2 个字符,这里是

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

我只是想去掉加密中的“09”或者是不同的。

【问题讨论】:

    标签: php encryption token


    【解决方案1】:

    首先你应该从你的函数返回$output而不是$key

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2013-06-17
      • 2017-05-04
      • 2016-04-15
      相关资源
      最近更新 更多