2013-06-22 138 views
0

我創建了兩個函數用於加密和解密這樣加密 - 解密,數據庫

function encryption($x) { 
    $key = 'SuperSecretKey'; 
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $x, MCRYPT_MODE_ECB); 
    return $encrypted; 
} 

function decryption($y) { 
    $key = 'SuperSecretKey'; 
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $y, MCRYPT_MODE_ECB); 
    return $decrypted; 
} 

我插入databbase其工作正常,當我從數據庫中檢索密碼,我得到這樣的加密密碼加密的密碼

$dpass = "select Password from persons where Email='" . $_POST['name'] . "'"; 
$rpass = mysql_query($dpass); 
$line = mysql_fetch_array($rpass); 
$lpass = $line['Password']; 
echo $lpass; 

但問題是,當U使用解密FUNC

$d_pass = decryption($lpass); 

echo $d_pass; 

它不給我用於密碼的相同文本?你能告訴我問題是什麼嗎?

+2

寫全部大寫被認爲是呼喊和粗魯。 –

+4

不要存儲加密的密碼。散列它們並存儲在數據庫中。 –

+2

除此之外,WTF是否在2013年使用'mysql_query'? :P查看[PDO](http://php.net/manual/en/book.pdo.php)和[mysqli](http://php.net/manual/en/book.mysqli.php)。 – cHao

回答

0

試試這個

function encryption($x) { 
    $key = 'SuperSecretKey'; 
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $x, MCRYPT_MODE_CBC, md5(md5($key)))); 
    return $encrypted; 
} 

function decryption($y) { 
    $key = 'SuperSecretKey'; 
    $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($y), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
    return $decrypted; 
}