2017-01-09 64 views
0

我正在處理的網站以散列形式存儲電子郵件地址password_hash() 我知道它是用於passowrds的,但該網站已經啓動,因此無法返回。查看數據庫中的散列電子郵件地址

現在,當新用戶嘗試註冊時,我需要檢查用戶正在使用的電子郵件地址是否已經在數據庫中。但由於所有的電子郵件地址都是散列的,我不能簡單地使用:

$mail_query = mysql_query("SELECT email FROM userbase WHERE email='$email'"); 
        $mail_num = mysql_num_rows($mail_query); 
        if ($mail_num != 0) { 
        $error = 'This email address is already in use.'; 

有沒有辦法做到這一點?

該網站使用舊的MySQL API。

+4

如果你真的*做*以安全的方式使用password_hash,你必須*檢索每一個。單。郵件。地址。*在您的數據庫中。抱歉。問題是:*爲什麼你甚至會散列電子郵件地址*?如果你想 - 如果你想 - 我知道,荒謬的想法 - 你想要發送*電子郵件*給你的一個用戶? –

+0

這個想法是在數據庫違規的情況下,用戶的電子郵件地址將保持不可讀。 – Menel

+0

那麼你如何給你的用戶發郵件呢? – Sammitch

回答

1

的唯一途徑,但很baaaad是讓AAAAALLLL電子郵件和檢查他們... ...對不起,也不記得MySQL_ *功能,但首先你需要做這樣的查詢:

SELECT email FROM userbase

然後,當你的所有電子郵件do循環和每一個電子郵件使用password_verify ...因此,在循環,你應該有這樣的:

if(password_verify($email,$hash)) { 
    echo "Email is already in use!"; 
    break; 
} 

就是這樣。祝你好運。但是我不喜歡這樣的散列:如果你需要提醒用戶密碼怎麼辦?

+3

「提醒用戶密碼」?例如:將他們的舊密碼發送給安全散列郵件地址旁的純文本文件。 *從不*提醒密碼,*只*重置它們。 ;) –

+0

@FranzGleichmann是的,對不起。我的英語...; D好吧,即使你想要,你也不能提醒用password_hash散列的密碼:D – Danielius

+0

@FranzGleichmann我認爲他的意思是「你怎麼給你的用戶發送密碼重置鏈接/標記?或者就此而言,發郵件給他們呢? – Sammitch

相關問題