2017-09-05 39 views
1

我加密了我在系統中用來傳遞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」不一樣。

回答

1

你應該從你的函數,而不是$key

被返回$output但因爲這顯然是一個錯字可以發佈,因爲您的不同示例輸出這裏,答案是沒有的OpenSSL,而是因爲的第一base64編碼大小。如果您的$string超過14個字符,則會得到不同的結局。

看到這個例子:https://3v4l.org/eIMMY