none
sha1-md5 veya aes encryption login girişi yapma RRS feed

  • Soru

  • c# .net windows form application  login giriş bilgilerini sha1-md5 veya aes encryption ile işrelemek istiyorum.

    kullanıcı adı ve şifreleri bir access db de tutuyorum panele girilen veriyi bu türlere çeviriyorum. ama databaseden alıp şifreleyip login girişini yapamıyorum.

    şimdiden destekleriniz için teşekkürler.

    23 Ocak 2020 Perşembe 13:04

Tüm Yanıtlar

  • Bu ornegi veritabaniniza uyarlayabilirsiniz (bir password, bir de salt sutunu olacak, ikisi de text, kullanıcı adları unique olmalı):

    // Veritabanindaki kullanicilar
    List<Person> people = new List<Person>();
    
    void Main()
    {
        InitDb();
    	// Login test
    	TestLogin("Person #5", "password5");
    	TestLogin("Person #5", "passwordx");
    }
    
    private void InitDb()
    {
    	for (int i = 0; i < 10; i++)
    	{
    		var p = new Person();
    		p.Id = i;
    		p.Name = $"Person #{i}";
    
    		var pwd = CreatePwdHash($"password{i}");
    		p.Password = pwd.PasswordHash;
    		p.Salt = pwd.PasswordSalt;
    		people.Add(p);
    	}
    }
    
    private void TestLogin(string userName, string password)
    {
    	var u = ValidateLogin(userName, password);
    	if (u == null)
    	{
    		Console.WriteLine("Login basarisiz.");
    	}
    	else
    	{
    		Console.WriteLine("Login basarili");
    		Console.WriteLine($"{u.Id}, {u.Name}");
    	}
    }
    
    private MyPassword CreatePwdHash( string password, string saltValue = "" )
    {
      byte[] salt = new byte[6];
      if( string.IsNullOrEmpty(saltValue) )
      {
         RandomNumberGenerator.Create().GetBytes(salt);
      }
      else
      {
         Convert.FromBase64String(saltValue).CopyTo(salt,0);
      }
      
      var pwdHash = MD5
        .Create()
        .ComputeHash( Encoding.Unicode.GetBytes(  BitConverter.ToString( salt ) + password ) );
      
      var pwd = new MyPassword() { 
        PasswordHash = Convert.ToBase64String( pwdHash ), 
        PasswordSalt = Convert.ToBase64String( salt )
        };
        
      return pwd;  
    }
    
    private Person ValidateLogin(string userName, string password)
    {
    	bool isValid = false;
    	var user = people.SingleOrDefault(p => p.Name == userName);
    	if (user != null)
    	{
    		var pwd = CreatePwdHash(password, user.Salt);
    		if (pwd.PasswordHash == user.Password)
    		{
    			isValid = true;
    		}
    	}
        return isValid ? user : null;
    }
    
    public class MyPassword
    {
      public string PasswordHash { get; set; }
      public string PasswordSalt { get; set; }
    }
    
    public class Person
    { 
    	public int Id { get; set; }
    	public string Name { get; set; }
    	public string Password { get; set; }
    	public string Salt { get; set; }
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    23 Ocak 2020 Perşembe 15:00
    Yanıtlayıcı
  • Deleted
    25 Ocak 2020 Cumartesi 01:12