2013-12-19 102 views
-1

我正在使用md5密碼並將它存儲在MySQL中。我沒有登錄問題,但我需要的是,我想將用戶在註冊期間輸入的確切密碼郵寄給他的郵件ID。我可以回來嗎?密碼併發送給郵件?如何在php中發送md5密碼?

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 
// encrypt password 
$encrypted_mypassword=md5($mypassword); 
+1

這是哈希的點,明文是**不可**恢復。但是由於您仍然使用MD5,因此任何'MD5 aabbcc ... nn'谷歌將很可能爲您找到相同的密碼;-) –

+4

1. MD5已經過時了一段時間。你爲什麼使用它? 2. MD5是一種哈希算法。這意味着它是*單向*。你無法取回它。 3.反轉密碼是一種不好的做法。讓用戶重置他們的密碼。 –

+2

你絕對不想在周圍發送密碼。 –

回答

-1

要直接回答你的問題,你可以通過這種方式發送用戶的「初始密碼」(假設MD5--不管你使用什麼哈希算法,邏輯都是一樣的)。

$seed_password = $_POST['initial_password']; // Save the user's selected password to this variable. 
$hash_password = md5($seed_password); // This variable will now hold your hashed password. 

// Save the $hash_password to the database. 
# YOUR CODE HERE 

// Email the Seed Password (in the simplest manner possible). 
mail('[email protected]' , 'Your new password' , 'Your new password is '. $seed_password); 

這將在散列前通過電子郵件發送密碼的值。同時,散列密碼將存儲在您的數據庫中。

現在 - 當你的用戶登錄時,你將不得不採取他們輸入的密碼,並在之前對它進行散列,將與數據庫中的散列值進行比較。

+0

請注意,我假設您使用$ _POST獲取密碼,但是您可以使用密碼填充該變量(無論您是否已自動發佈或生成)。 –

+0

真的,我很欣賞你回答我的問題的方式。這是我想要的確切答案。即使我瞭解發送明文密碼的風險。但我只是問它的客戶要求。我會盡力說服客戶。非常感謝你的寶貴迴應 –

+0

其實我沒有改變。我認爲它喜歡在臉書上,所以我喜歡這兩個答案。就在現在,我意識到它不像Facebook那樣喜歡按鈕。你的答案是我所期望的。再次感謝你 –

2

大家都在指出,使用md5並不是一個好主意。考慮使用像bcrypt這樣的相對直接用PHP實現的東西。確保你使用隨機鹽,並且正確實施,以確保它正在做你正在做的事情。這是一個很好的指導,你可以玩https://gist.github.com/marcoarment/1053158

與其向用戶發送他們的密碼(在多個級別上這是一個糟糕的選項),您可能會考慮給他們發送一個隨機生成的散列,將它們帶到您的應用程序,他們可以完全自行重置其密碼。

用PHP發送郵件可以是一個簡單的過程。你可以參考這個http://php.net/manual/en/function.mail.php。有幾個很好的例子。對於發送不太可能以垃圾郵件結束的交易郵件,您可能會考慮使用諸如http://postmarkapp.com之類的服務。

+0

我知道如何用php發送郵件。併發送用戶名和密碼,但密碼是散列,我不想這樣。 –

+0

您的應用程序的任何用戶都不會喜歡在他們的收件箱中獲取明文密碼。假設想象我用zerocool嗅探周圍的公共WiFi上檢查我的非ssl電子郵件帳戶,他看到消息的內容?想象一下,我是一個很有吸引力的網絡用戶,我看到你的密碼是明文嗎?我會假設你正在以明文存儲它,並且會避免你提供的任何服務,比如瘟疫。沒有藉口,這是不好的做法,你會不必要地危及你的用戶。 – Jared

+0

我明白每個人的觀點,但這不是問題。看到我對你實際詢問的問題的回答。 –

0

如果你的字符串轉換爲md5字符串,你永遠不會再回來了,但你可以嘗試在網絡上的MD5解密器,但它不會100%按預期工作。嘗試用新密碼重置,我認爲它更安全。

+0

謝謝你的朋友。我將嘗試重置密碼 –