2017-04-27 103 views
-1

我使用此代碼來加密密碼,但它不工作PHP 5.6或更高版本。請在不更改算法的情況下向我推薦新代碼。PHP加密在5.6或更高版本中不起作用?

請給我新的代碼,而不改變算法。

<?php 
class Encryption { 
    var $skey = "844958uyjd875e89t5f4h6j4h5g"; // you can change it 

    public function safe_b64encode($string) { 
     $data = base64_encode($string); 
     $data = str_replace(array('+','/','='),array('-','_',''),$data); 
     return $data; 
    } 

    public function safe_b64decode($string) { 
     $data = str_replace(array('-','_'),array('+','/'),$string); 
     $mod4 = strlen($data) % 4; 
     if ($mod4) { 
      $data .= substr('====', $mod4); 
     } 
     return base64_decode($data); 
    } 

    public function encode($value){ 
     if(!$value){return false;} 
     $text = $value; 
     $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
     $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
     $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv); 
     return trim($this->safe_b64encode($crypttext)); 
    } 

    public function decode($value){ 
     if(!$value){return false;} 
     $crypttext = $this->safe_b64decode($value); 
     $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
     $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
     $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv); 
     return trim($decrypttext); 
    } 
} 
?> 
+0

爲什麼一個要密碼,這樣的方式加密?!? – arkascha

+1

_「不起作用」_是什麼意思?錯誤?錯誤的結果?無論哪種方式。 **您應該永遠不要存儲加密密碼。**這是一個重大的安全風險。你應該_只保存密碼哈希值! –

+0

首先檢查mcrypt是否安裝?如果沒有安裝,則從第三方安裝。 –

回答

1

只需使用password_hashpassword_verify。這是保護密碼的最安全的方法。 例如:

$password_hash = password_hash("yourpassword", PASSWORD_DEFAULT); 

if (password_verify('yourpassword', $password_hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 

http://php.net/manual/en/function.password-hash.php

相關問題