نمونه برنامه لاگین با طراحی یک دیتابیس داخلی و هش کردن- #Console-C

در اینجا یک نمونه ساده از برنامه لاگین با استفاده از دیتابیس داخلی (مانند SQLite) و هش کردن رمز عبور در سی‌شارپ آورده شده است.
این برنامه از System.Data.SQLite برای مدیریت دیتابیس و از System.Security.Cryptography برای هش کردن استفاده می‌کند.
مراحل ایجاد پروژه
1. نصب کتابخانه SQLite: کتابخانه System.Data.SQLite را به پروژه اضافه کنید.
2. ایجاد دیتابیس داخلی: یک فایل SQLite ایجاد کنید یا در کد ایجاد کنید.
3. هش کردن رمز عبور: از الگوریتم‌هایی مانند SHA256 استفاده کنید.

				
					using System;
using System.Data.SQLite;
using System.Security.Cryptography;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string connectionString = "Data Source=users.db;Version=3;";
        
        // ایجاد دیتابیس و جدول در صورت نیاز
        InitializeDatabase(connectionString);

        Console.WriteLine("1. ثبت نام");
        Console.WriteLine("2. ورود");
        Console.Write("انتخاب: ");
        var choice = Console.ReadLine();

        if (choice == "1")
        {
            RegisterUser(connectionString);
        }
        else if (choice == "2")
        {
            LoginUser(connectionString);
        }
        else
        {
            Console.WriteLine("انتخاب نامعتبر است.");
        }
    }

    static void InitializeDatabase(string connectionString)
    {
        using (var connection = new SQLiteConnection(connectionString))
        {
            connection.Open();
            string createTableQuery = @"
                CREATE TABLE IF NOT EXISTS Users (
                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
                    Username TEXT NOT NULL UNIQUE,
                    PasswordHash TEXT NOT NULL
                )";
            using (var command = new SQLiteCommand(createTableQuery, connection))
            {
                command.ExecuteNonQuery();
            }
        }
    }

    static void RegisterUser(string connectionString)
    {
        Console.Write("نام کاربری: ");
        string username = Console.ReadLine();
        Console.Write("رمز عبور: ");
        string password = Console.ReadLine();

        string passwordHash = HashPassword(password);

        using (var connection = new SQLiteConnection(connectionString))
        {
            connection.Open();
            string insertQuery = "INSERT INTO Users (Username, PasswordHash) VALUES (@Username, @PasswordHash)";
            using (var command = new SQLiteCommand(insertQuery, connection))
            {
                command.Parameters.AddWithValue("@Username", username);
                command.Parameters.AddWithValue("@PasswordHash", passwordHash);

                try
                {
                    command.ExecuteNonQuery();
                    Console.WriteLine("ثبت نام موفقیت‌آمیز بود.");
                }
                catch (SQLiteException ex)
                {
                    Console.WriteLine("خطا: " + ex.Message);
                }
            }
        }
    }

    static void LoginUser(string connectionString)
    {
        Console.Write("نام کاربری: ");
        string username = Console.ReadLine();
        Console.Write("رمز عبور: ");
        string password = Console.ReadLine();

        string passwordHash = HashPassword(password);

        using (var connection = new SQLiteConnection(connectionString))
        {
            connection.Open();
            string selectQuery = "SELECT COUNT(*) FROM Users WHERE Username = @Username AND PasswordHash = @PasswordHash";
            using (var command = new SQLiteCommand(selectQuery, connection))
            {
                command.Parameters.AddWithValue("@Username", username);
                command.Parameters.AddWithValue("@PasswordHash", passwordHash);

                int count = Convert.ToInt32(command.ExecuteScalar());
                if (count > 0)
                {
                    Console.WriteLine("ورود موفقیت‌آمیز بود.");
                }
                else
                {
                    Console.WriteLine("نام کاربری یا رمز عبور اشتباه است.");
                }
            }
        }
    }
static string HashPassword(string password)
    {
        using (SHA256 sha256 = SHA256.Create())
        {
            byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(password));
            StringBuilder builder = new StringBuilder();
            foreach (var b in bytes)
            {
                builder.Append(b.ToString("x2"));
            }
            return builder.ToString();
        }
    }
}
				
			

توضیحات کد
1. دیتابیس SQLite: یک فایل دیتابیس به نام users.db ایجاد می‌شود.
2. ساخت جدول: اگر جدول Users وجود نداشته باشد، در ابتدای اجرا ساخته می‌شود.
3. هش کردن رمز عبور: رمز عبور با استفاده از الگوریتم SHA256 هش می‌شود و به صورت امن در دیتابیس ذخیره می‌گردد.
4. ثبت‌نام: اطلاعات کاربر جدید به دیتابیس اضافه می‌شود.
5. ورود: اطلاعات وارد شده با دیتابیس مقایسه می‌شود.
نکات امنیتی
هرگز رمز عبور را به صورت متن ساده ذخیره نکنید.
برای افزایش امنیت، از salt همراه با هش استفاده کنید.
SQLite مناسب برای پروژه‌های کوچک است. برای پروژه‌های بزرگتر، از دیتابیس‌های قوی‌تر مانند SQL Server یا MySQL استفاده کنید.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا