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();
}
}
}