首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 使用 FormsAuthentication 加密存儲密碼的實戰指南

     編輯:ASP.NET 基礎

為什麼要加密存儲密碼?

直接存儲明文密碼極不安全:數據庫被竊取時,所有用戶密碼立即洩露。最佳實踐是只存儲密碼的哈希值。驗證時,對用戶輸入的密碼進行相同哈希運算,比對哈希值是否一致。

.NET 內置方案:FormsAuthentication.HashPasswordForStoringInConfigFile

位於 System.Web.Security 命名空間,支持 SHA1 與 MD5 兩種哈希算法。調用極簡單:

string hashedPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(userInputPwd, "SHA1");
// 或 "MD5"

完整登錄頁面示例

前端 (loginform.aspx)

<%@ Page language="c#" Codebehind="loginform.aspx.cs" AutoEventWireup="false" Inherits="konson.log.loginform" %>
<HTML><body MS_POSITIONING="GridLayout">
<form id="loginform" method="post" runat="server">
<table>
<tr><td>登錄名</td><td><asp:TextBox id="userid" runat="server" Width="101px"></asp:TextBox></td></tr>
<tr><td>密碼</td><td><asp:TextBox id="pwd" runat="server" TextMode="Password" Width="101px"></asp:TextBox></td></tr>
<tr><td><asp:Button id="login" runat="server" Text="登 錄"></asp:Button></td>
    <td><asp:Button ID="cancel" Runat="server" Text="取 消"></asp:Button></td></tr>
</table></form></body></HTML>

後台 (loginform.aspx.cs)

using System; using System.Web.Security; using System.Web.UI.WebControls;
namespace konson.log
{
    public class loginform : System.Web.UI.Page
    {
        protected TextBox userid, pwd; protected Button login, cancel;
        private void Page_Load(object sender, EventArgs e) {}
        private void login_Click(object sender, System.EventArgs e)
        {
            string epwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd.Text, "SHA1");
            // epwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd.Text, "MD5");
            Response.Write(epwd); // 實際應保存至數據庫並比對
        }
    }
}

安全補充建議

  • 優先使用 SHA256/SHA512 或 PBKDF2/BCrypt:MD5/SHA1 已不推薦用於密碼哈希(碰撞風險、計算過快)。.NET Core/5+ 建議用 Microsoft.AspNetCore.Cryptography.KeyDerivation 或 BCrypt.Net-Next。
  • 加鹽:每個密碼使用唯一隨機鹽值,防彩虹表攻擊。
  • HTTPS 傳輸:確保密碼在網絡傳輸中加密。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved