2014-02-07 32 views
0

我正在嘗試使用SHA1()來加密正在使用MySql作爲遠程數據庫的Android應用程序的密碼。MySql SHA1()允許不正確的密碼短語

要測試實現,我只是將用戶電子郵件地址添加到密碼並通過SHA1()運行。該代碼段是從SQL數據庫上:

INSERT INTO person (
email_address, 
user_password 
) VALUES (
str_email, 
SHA1(str_password+str_email) 
); 

登錄功能:

SELECT id FROM person WHERE 
email_address = userEmail AND 
user_password = SHA1(userPassword+userEmail); 

如果我加一個人有「[email protected]」和「ABC」作爲密碼,然後使用'[email protected]'和'differentPassword'調用登錄函數,該過程仍然會從人員表中返回正確的ID,在那裏我預計沒有結果。

與SHA1('正確的電子郵件'+'正確的密碼')匹配的SHA1('正確的電子郵件'+'錯誤的密碼')如何?

我使用的主機是慈善機構的雲主機。 BCrypt不可用,所以我僅限於使用內置的MySql函數。

+1

使用SHA1來「加密」密碼是非常薄弱的​​,不是一個好主意。 – tadman

+2

SHA不加密!這是一個哈希算法。 – marekful

+0

謝謝,我已經更新了這個問題,以表明我正在使用的限制。 – DaveSav

回答

0

您正在選擇所有適合您直接選擇的記錄。一般的模式是這樣的:

SELECT id FROM person WHERE email_address=? AND password_crypted=? 

這是password_crypted使用,起碼,密碼特定的散列函數一樣bcrypt

+0

它看起來像建議的模式正是OP使用的(忽略使用參數)。 –

+0

謝謝,我已經更新了這個問題,以表明我正在使用的限制。 – DaveSav

3

MySQL不支持連接的+符號。改爲使用||CONCAT()

另外,考慮使用更安全的散列函數。

+1

+1好。結果+在每種情況下可能爲零。 –

+0

謝謝,花了我一段時間趕上這一個:P – Infinity

+0

謝謝,我已經更新了問題,以表明我正在工作的限制。 – DaveSav