2011-07-26 41 views
2

我來到翻過代碼:如何重置和改變在asp.net成員資格提供散列密碼MVC

MembershipUser u = Membership.GetUser(); 
u.ChangePassword(u.ResetPassword(), "Password"); //where will I get the "Password" from 

我不明白,我怎麼會 獲得客戶端密碼,用戶忘記他的老密碼。 我要添加一個重置功能這將產生一個隨機的密碼和 發送電子郵件到特定的客戶端,這將有用戶ID和隨機生成的密碼。他/她能夠改變密碼後。

+1

還有什麼不明白嗎?這是將用戶密碼設置爲「密碼」。這只是一個字符串,可以輸入到任何地方,或者是一個硬編碼的字符串,它們在進入網站的「更改我的密碼」部分之前(也許是來自電子郵件中的鏈接)通過電子郵件發送給用戶。的 –

+0

oryt所以代替使用「密碼」,我們可以使用類似:串NEWPASSWORD = Membership.GeneratePassword(8,2);然後通過新密碼 –

+0

準確呀... –

回答

3

可以使用Membership GeneratePassword方法

string password = System.Web.Security.Membership.GeneratePassword(14, 0); 

如果您需要創建自己的鹽和散列一個新的密碼生成這樣的隨機密碼,這裏是做多一樣的會員代碼的實現:

public class Cryptographer : ICryptographer 
{ 
    #region ICryptographer Members 

    public string CreateSalt() 
    { 
     byte[] data = new byte[0x10]; 
     new RNGCryptoServiceProvider().GetBytes(data); 
     return Convert.ToBase64String(data); 
    } 

    /// <summary> 
    /// Hash the password against the salt 
    /// </summary> 
    /// <param name="pass">Plain password</param> 
    /// <param name="salt">Salt string</param> 
    /// <returns>Encrypted password</returns> 
    public string HashPassword(string password, string salt) 
    { 
     byte[] bytes = Encoding.Unicode.GetBytes(password); 
     byte[] src = Convert.FromBase64String(salt); 
     byte[] dst = new byte[src.Length + bytes.Length]; 
     byte[] inArray = null; 
     Buffer.BlockCopy(src, 0, dst, 0, src.Length); 
     Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length); 
     HashAlgorithm algorithm = HashAlgorithm.Create(System.Web.Security.Membership.HashAlgorithmType); 
     inArray = algorithm.ComputeHash(dst); 
     return Convert.ToBase64String(inArray); 
    } 

    #endregion 
} 
+0

第一個是簡潔,好多了,什麼abt改變散列密碼? –

+0

這就是如果您需要直接保存到數據庫,或者如果您正在製作自己的提供者變體。根據你在做什麼,你可能沒有這個。 – CRice

+0

你好我直接保存到分貝,但用戶可以在重置後更改密碼。 –

1

ChangePassword方法的第二個參數是一個字符串,它重新設置了您希望用於該用戶的新密碼。

你可以改變這是你想要的,你會通過電子郵件發送給用戶的任何字符串,甚至是自動生成的字符串。

UPDATE

要回答你的新的問題,我認爲,密碼等所有散列由會員提供處理。

如果您只是想將用戶密碼重置爲隨機新值,則最好使用ResetPassword方法而不是ChangePassword

這將:

重置用戶密碼到一個新的,自動生成的密碼。

+0

星爺但隨機密碼,將不會是一個友好的一個,我想要的是提供用戶與密碼更改功能,以便他們可以將密碼更改爲更具可讀性的, –

相關問題