40 lines
1.5 KiB
C#
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());
|
|
}
|
|
}
|
|
}
|