2015-07-21 55 views
0

我有一個php的問題,我正在編程一個php文件,以便通過printf顯示與數據庫相關的encrypted_pa​​ssword數據。我要挑值並在屏幕上顯示出來,但不工作,我已經這樣做了:通過屏幕通過printf在mysqli中用php加密的數據顯示

$query = "SELECT * FROM `users` WHERE `email` = '$email' ORDER BY `users`.`uid` ASC LIMIT 0 , 30"; 

$result = $con->query($query); $row = $result->fetch_array(MYSQLI_ASSOC); 
printf ("consulta %s nombre: %s email:(%s) salt: %s y pass: $s\n", $query,$row['name'], $row['email'],$row['salt'],base64_encode($row['encrypted_password'])); 

和printf顯示:

CONSULTA SELECT * FROM users WHERE email =「elvega3009 @ msn.com'ORDER BY usersuid ASC LIMIT 0,30 NOMBRE:XXXX電子郵件:([email protected])鹽:a3f7734b0eÿ通:

的通字段不通過絲網顯示,該數據是在編碼BASE64_ENCODE在數據庫中,我不知道這是否是問題,但我需要通過屏幕顯示此數據。 我需要幫助。非常感謝提前

+0

如果跳過base64_encode函數會發生什麼?你看到「Pass:」字段中的值嗎?你嘗試var_dump(base64_encode($ row ['encrypted_pa​​ssword']))?.要小心,base64_encode是一個編碼模式,它可以輕鬆推導出來。對於密碼,您需要加密機制(散列函數),如md5 o sha。請參閱http://stackoverflow.com/questions/3993937/which-is-best-encryption-method-base-64-or-md5 –

回答

0

嘗試在該行的末尾將%S代替$ S:

printf ("consulta %s nombre: %s email:(%s) salt: %s y pass: $s\n", `$query,$row['name'],` $row['email'],$row['salt'],base64_encode($row['encrypted_password'])); 

您還應該使用MD5或SHA-1功能來存儲密碼。

+0

嗨,謝謝你的回答。我已經閱讀了關於md5和sha1的加密,這很容易,但是如何用這些函數解密? – elvega

+0

他們不容易解密,這就是想法。您將把散列密碼存儲在數據庫中,然後您只會將從數據庫中獲取的密碼哈希與用戶插入的密碼進行比較。例如($ hashPassFromDB == md5($ _ POST ['password'])。你可以在這篇文章中看到一個例子:http://stackoverflow.com/questions/488804/php-mysql-compare-password 你可以學習有關密碼散列的更多信息,請參閱以下優秀文章:http://www.sitepoint.com/password-hashing-in-php/ –