2013-06-22 140 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; 
}