using System;
using System.Text;
namespace PasswordTest
{
class Program
{
static void Main(string[] args)
{
string exit = string.Empty;
var pi = new PasswordInfo();
pi.Name = "Name";
pi.Surname = "Surname";
while (exit != "exit")
{
Console.WriteLine("Enter A Password:");
pi.Password = Console.ReadLine();
Console.WriteLine(Program.CheckPasswordFormat(pi).Data.ToString());
};
}
public struct ResultInfo
{
public bool Success { get; }
public object Data { get; }
public ResultInfo(bool success, object data)
{
Success = success;
Data = data;
}
}
public class PasswordInfo
{
string name;
public string Name {
get { return name; }
set { name = value?.Trim(); }
}
string surname;
public string Surname {
get { return surname; }
set { surname = value?.Trim(); }
}
string password;
public string Password {
get { return password; }
set { password = value?.Trim(); }
}
}
public static ResultInfo CheckPasswordFormat(PasswordInfo pi)
{
var error = new ResultInfo(false,
"En az 6 en, fazla 128 karakter olmalıdır.Türkçe karakter içermeden en az bir büyük, en az bir küçük harf,en az bir rakam ve en az bir özel karakter içermelidir. Örneğin (~!@#$%^&*_-+=`|\\(){}[]:;\"'<>,.?/). Ad ve soyad içermemelidir."
);
if (pi.Password == null)
return error;
if (pi.Password.Length < 6 || pi.Password.Length > 128)
return error;
if (pi.Password.IndexOf(' ') > -1)
return error;
if (!string.IsNullOrEmpty(pi.Name))
if (pi.Name.Length > 2)
if (pi.Password.ToLower().IndexOf(pi.Name.ToLower()) > -1)
return error;
if (!string.IsNullOrEmpty(pi.Surname))
if (pi.Surname.Length > 2)
if (pi.Password.ToLower().IndexOf(pi.Surname.ToLower()) > -1)
return error;
var nonAlphaNumericCharacters = "~!@#$%^&*_-+=`|\\(){}[]:;\"'<>,.?/";
foreach (var c in nonAlphaNumericCharacters)
{
if (pi.Password.IndexOf(c) > -1)
goto passedNonAlphaNumeric;
}
return error;
passedNonAlphaNumeric:
for (char c = 'a'; c <= 'z'; c++)
{
if (pi.Password.IndexOf(c) > -1)
goto passedLowCharacters;
}
return error;
passedLowCharacters:
for (char c = 'A'; c <= 'Z'; c++)
{
if (pi.Password.IndexOf(c) > -1)
goto passedCapitalCharacters;
}
return error;
passedCapitalCharacters:
for (char c = '0'; c <= '9'; c++)
{
if (pi.Password.IndexOf(c) > -1)
goto passedDigits;
}
return error;
passedDigits:
//Varsayılan karakterler dışında bir karakter yazıldıysa örneğin:ı,ç,ş,ö,ğ,€
var sb = new StringBuilder(nonAlphaNumericCharacters);
for (char c = '0'; c <= '9'; c++)
sb.Append(c);
for (char c = 'a'; c <= 'z'; c++)
sb.Append(c);
for (char c = 'A'; c <= 'Z'; c++)
sb.Append(c);
var allChars = sb.ToString();
foreach (var c in pi.Password)
{
if (allChars.IndexOf(c) == -1)
return error;
}
return new ResultInfo(true, "OK");
}
}
}
Password etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Password etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
23 Şubat 2018
C# Parola Kontrolü
Parola kontrol için hazır kod.
5 Ocak 2018
C# Bcrypt ile Şifreleme
Database içerisinde şifreleri saklarken düz olarak saklamak yerine şifreleyerek saklamamız bize kullanıcının şifresinin çalınması durumunda şifrenin geriye dönüştürülmesine izin vermeyerek olası izinsiz işlemlerin önüne geçmemize yardımcı olur. Bunların içerisinde en güvenli yöntemlerden birisi olan Bcrypt metodunun nasıl kullanılacağına bir örnek.
Kaynak
https://github.com/BcryptNet/bcrypt.net
using System;
using System.Collections.Generic;
using System.Linq;
//https://www.nuget.org/packages/BCrypt.Net-Next/ paketinden dll kurulacak.
namespace BcryptDemo
{
class Program
{
static List<User> Users { get; set; }
static void Main(string[] args)
{
//Temsili kullanıcı adı ve database
Users = new List<User>();
Users.Add(new User
{
Username = "user1",
Password = BCrypt.Net.BCrypt.HashPassword("test1")
});
Users.Add(new User
{
Username = "user2",
Password = BCrypt.Net.BCrypt.HashPassword("test2")
});
Console.WriteLine("Database kullanıcı adları ve şifreler");
foreach (var _user in Users)
{
Console.WriteLine(_user.ToString());
}
Console.Write("Username:");
var username = Console.ReadLine();
Console.Write("Password:");
var password = Console.ReadLine();
//Temsili database sorgusunu
var user = Users.SingleOrDefault(q => q.Username == username);
var dogrula = false;
if (user != null)
dogrula = BCrypt.Net.BCrypt.Verify(password, user.Password);
Console.WriteLine(dogrula ? "Giriş yapıldı" : "Hatalı kullanıcı adı veya şifre");
if (dogrula)
{ //Dikkat edersek aynı kelime için farklı hash kodları alıyoruz.
//Bu yüzden tahmin edilmesi ve ters çevrilmesi neredeyse imkansız.
var _password = BCrypt.Net.BCrypt.HashPassword(password);
Console.WriteLine($"Doğrularken oluşturulan yeni hash kodu eskisinden farklı bu yüzden tahmin edilmesi ve ters çevrilmesi neredeyse imkansız\n {_password}");
}
}
}
public class User
{
public string Username { get; set; }
public string Password { get; set; }
public override string ToString()
{
return $"Username: {Username}, Password: {Password}";
}
}
}
Kaynak
https://github.com/BcryptNet/bcrypt.net
Kaydol:
Kayıtlar (Atom)