C# 实现简单的登录验证系统

简介: 本系统通过用户名密码验证实现安全登录,采用SHA256加盐值哈希加密存储密码,防止明文泄露。结合注册与登录功能,确保用户身份安全,有效抵御密码还原攻击。

登录系统核心是验证用户名密码,结合之前的哈希加密和配置文件,实现安全登录。

案例:登录验证系统

public class LoginSystem
{
    // 模拟数据库存储的用户(密码已用SHA256+盐值加密)
    private static readonly Dictionary<string, (string PasswordHash, string Salt)> _users = new Dictionary<string, (string, string)>
    {
        { "admin", ("e8f69d2c7e5d3a1b0f8e9d7c6b5a493876543210f9e8d7c6b5a493876543210", "salt123") },
        { "user1", ("a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890", "salt456") }
    };
    // 生成盐值+哈希密码
    private static (string PasswordHash, string Salt) HashPassword(string password)
    {
        string salt = RandomHelper.GetRandomString(6); // 6位随机盐值
        string saltedPassword = password + salt;
        string hash = HashHelper.ComputeSHA256(saltedPassword);
        return (hash, salt);
    }
    // 验证用户名密码
    public static bool Login(string username, string password)
    {
        if (!_users.TryGetValue(username, out var userData))
        {
            Console.WriteLine("用户名不存在!");
            return false;
        }
        // 拼接输入密码和存储的盐值,计算哈希
        string saltedInput = password + userData.Salt;
        string inputHash = HashHelper.ComputeSHA256(saltedInput);
        // 对比哈希值
        bool isSuccess = inputHash == userData.PasswordHash;
        if (isSuccess)
        {
            Console.WriteLine("登录成功!");
        }
        else
        {
            Console.WriteLine("密码错误!");
        }
        return isSuccess;
    }
    // 注册新用户(模拟)
    public static bool Register(string username, string password)
    {
        if (_users.ContainsKey(username))
        {
            Console.WriteLine("用户名已存在!");
            return false;
        }
        var (hash, salt) = HashPassword(password);
        _users.Add(username, (hash, salt));
        Console.WriteLine("注册成功!");
        return true;
    }
    public static void Main(string[] args)
    {
        Console.WriteLine("=== 登录系统 ===");
        Console.Write("请选择操作(1-登录,2-注册):");
        string choice = Console.ReadLine()?.Trim() ?? "";
        switch (choice)
        {
            case "1":
                Console.Write("请输入用户名:");
                string username = Console.ReadLine()?.Trim() ?? "";
                Console.Write("请输入密码:");
                string password = Console.ReadLine()?.Trim() ?? "";
                Login(username, password);
                break;
            case "2":
                Console.Write("请输入用户名:");
                string newUsername = Console.ReadLine()?.Trim() ?? "";
                Console.Write("请输入密码:");
                string newPassword = Console.ReadLine()?.Trim() ?? "";
                Register(newUsername, newPassword);
                break;
            default:
                Console.WriteLine("无效操作!");
                break;
        }
    }
}

关键:密码不直接存储,而是存储 “密码 + 盐值” 的哈希值,即使数据泄露,攻击者也无法还原原始密码。

相关文章
|
3月前
|
安全 C# 数据安全/隐私保护
C# 实现验证码 + 登录的整合案例
整合图形验证码与用户登录功能,实现安全的登录验证流程。系统生成验证码图片并校验输入,结合用户名密码双重验证,提升账户安全性,有效防止自动化攻击。
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
1842 0
|
C# 容器
Winform控件优化之TabControl控件的美化和功能扩展
在基本的TabControl控件使用和功能之上,可以尝试对其进行美化和功能扩展,比如动态删除或添加tab、绘制图标按钮及鼠标hover时的背景变化、Tab从右向左布局的优化处理等。最重要...
3989 0
Winform控件优化之TabControl控件的美化和功能扩展
|
3月前
|
存储 算法 C#
C# 哈希值计算:MD5/SHA256 加密
本示例展示了C#中使用MD5和SHA256算法生成哈希值的方法,适用于密码加密与数据校验。MD5安全性较低,建议仅用于非敏感场景;密码存储推荐使用SHA256配合盐值以增强安全性。
|
3月前
|
C#
C# 随机数生成:Random 类用法
Random类用于生成伪随机数,适用于游戏、验证码、测试等场景。通过静态实例避免重复创建,确保随机性。提供整数、小数、布尔值及指定长度的随机字符串生成方法,使用简便且高效。注意需复用实例防止种子重复导致随机数相同。
|
3月前
|
存储 开发框架 缓存
C# 实现图片验证码的 WebAPI 版(ASP.NET Core)
基于ASP.NET Core实现的验证码服务,生成带干扰线和随机旋转文字的4位图文验证码,支持内存存储与验证。需安装System.Drawing.Common包。
|
3月前
|
C#
C# 实现简单的 AOP(面向切面编程)
通过反射与委托实现AOP,可在方法执行前后动态添加日志、计时等横切逻辑,提升代码复用性与可维护性。
|
3月前
|
C#
C# 实现简单的定时任务工具
基于 `System.Timers.Timer` 实现定时任务,支持周期性与单次执行。通过封装 Timer 类,提供启动、停止功能,并包含异常处理,确保任务稳定运行,适用于后台定时操作场景。
|
3月前
|
JSON API C#
C# 实现简单的 HTTP 请求工具(GET/POST)
HTTP请求工具用于调用第三方API,支持GET和POST方法,实现数据获取与提交。示例代码展示通过HttpClient发送异步POST请求,处理响应并解析JSON结果,适用于高效集成外部服务。
|
3月前
|
JSON C# 数据格式
C# JSON 序列化与反序列化:Newtonsoft.Json 用法
JSON是前后端交互常用格式,Newtonsoft.Json(Json.NET)是C#中最流行的JSON处理库。本文介绍如何使用它实现对象与JSON字符串的序列化和反序列化,并提供封装工具类及调用示例,便于在项目中快速集成与使用。

热门文章

最新文章