Yuna/Yuna.Website/Yuna.Website.Server/Infrastructure/Encrypter.cs

40 lines
1.5 KiB
C#

using System.Security.Cryptography;
using System.Text;
namespace Yuna.Website.Server.Infrastructure
{
public class Encrypter
{
private static HMACSHA256 _passwordHasher = new() { Key = [2, 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, 2] };
private static HMACSHA256 _tokenHasher = new() { Key = [21, 12, 21, 21, 2, 11, 111, 2, 2, 21, 2, 21, 2, 2] };
public static string HashPassword(string password, string username)
{
var loweredUsername = username.ToLower();
var hashedPassword = Convert.ToBase64String(_passwordHasher.ComputeHash(Encoding.UTF8.GetBytes(password + loweredUsername)))
?? throw new ArgumentNullException("didnt manage to generate password");
return hashedPassword;
}
public static byte[] CreateTokenSalt(long userId, DateTime creationTime)
{
return Encoding.UTF8.GetBytes(userId.ToString() + creationTime.ToString("dd_mm_yy___hh_ss"));
}
public static string HashTokenSalt(byte[] bytesStr)
{
var hashedSalt = _tokenHasher.ComputeHash(bytesStr);
return Convert.ToBase64String(hashedSalt);
}
public static string GenerateRandomString(int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
}
}
}