Files
BeWoPlaner/BeWoDatabaseTerminator/BeWoDatabaseTerminator/Security/PasswordHelper.cs
Lyndon Jetten 2f8dcc87f0 BeWoDatabaseTerminator hinzugefügt
Kalender-Report für Kollegium e.V. angefangen. Noch nicht fertig!
2022-10-11 16:48:36 +02:00

82 lines
3.1 KiB
C#

using System;
using System.Security.Cryptography;
using System.Text;
namespace BeWoDatabaseTerminator.Security
{
public static class PasswordHelper
{
private const string _LowerCaseLetters = "abcdefghijklmnopqrstuvwxyz";
private const string _UpperCaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private const string _Numbers = "0123456789";
/// <summary>
/// Erzeugt das zufällige, zehnstellige, alphanumerisches Initialpasswort
/// </summary>
/// <param name="random">Random zur Erzeugung zufälliger Indizes</param>
/// <returns></returns>
public static string GenerateInitialPassword(Random random)
{
var password = "";
for(var i = 0; i < 10; i++)
{
var r1 = random.Next(0, 3);
switch(r1)
{
case 0:
password += _LowerCaseLetters[random.Next(0, 26)];
break;
case 1:
password += _UpperCaseLetters[random.Next(0, 26)];
break;
case 2:
password += _Numbers[random.Next(0, 10)];
break;
default:
password += _LowerCaseLetters[i];
break;
}
}
return password;
}
/// <summary>
/// Erzeugt das Passwort für die neuangelegte Datenbank.
/// </summary>
/// <param name="initialPassword">Das 10-stellige Initialpasswort</param>
/// <returns>Ein ApplicationUserCredentials-Objekt mit den für die Datenbank notwendigen strings.</returns>
public static ApplicationUserCredentials GenerateUserCredentials(string initialPassword)
{
if(string.IsNullOrWhiteSpace(initialPassword) || initialPassword.Length < 10)
{
throw new ArgumentException("Das Initialpasswort ist ungültig!", nameof(initialPassword));
}
var salt = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString())));
var md5 = new MD5CryptoServiceProvider();
var hashedPassword = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes($"{salt}_{initialPassword}_o238rRndguK4Fh8dsfkhwon54H8n3qo4itv8nz3o4LvnzQs0npmwEp")));
var bCryptSalt = BCrypt.GenerateSalt();
var bCryptPassword = BCrypt.HashPassword(initialPassword, bCryptSalt);
return new ApplicationUserCredentials(salt, hashedPassword, bCryptPassword);
}
}
public class ApplicationUserCredentials
{
public string Salt { get; }
public string HashedPassword { get; }
public string BCryptPassword { get; }
public ApplicationUserCredentials(string salt, string hashedPassword, string bCryptPassword)
{
Salt = salt;
HashedPassword = hashedPassword;
BCryptPassword = bCryptPassword;
}
}
}