Add user extensions and encryption modules.
This commit is contained in:
17
MarketData/MarketDataLib/Extensions/UserExtensions.cs
Executable file
17
MarketData/MarketDataLib/Extensions/UserExtensions.cs
Executable file
@@ -0,0 +1,17 @@
|
||||
using MarketData.MarketDataModel.User;
|
||||
using MarketData.Security;
|
||||
|
||||
namespace MarketData.Extensions
|
||||
{
|
||||
public static class UserExtensions
|
||||
{
|
||||
public static bool Verify(this User user, string password)
|
||||
{
|
||||
if(null == user || null == user.Username || null == user.Salt || null==user.Hash)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return Encryption.VerifyPassword(password, user.Salt, user.Hash);
|
||||
}
|
||||
}
|
||||
}
|
||||
52
MarketData/MarketDataLib/Security/Encryption.cs
Executable file
52
MarketData/MarketDataLib/Security/Encryption.cs
Executable file
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
namespace MarketData.Security
|
||||
{
|
||||
public class Encryption
|
||||
{
|
||||
public static string HashPassword(string password)
|
||||
{
|
||||
using (SHA256 sha256 = SHA256.Create())
|
||||
{
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(password);
|
||||
byte[] hashBytes = sha256.ComputeHash(bytes);
|
||||
return Convert.ToBase64String(hashBytes);
|
||||
}
|
||||
}
|
||||
|
||||
public static (string Salt, string Hash) HashPasswordWithSalt(string password)
|
||||
{
|
||||
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
|
||||
{
|
||||
byte[] salt = new byte[16];
|
||||
rng.GetBytes(salt);
|
||||
using (SHA256 sha256 = SHA256.Create())
|
||||
{
|
||||
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
|
||||
byte[] saltedPassword = new byte[passwordBytes.Length + salt.Length];
|
||||
Buffer.BlockCopy(passwordBytes, 0, saltedPassword, 0, passwordBytes.Length);
|
||||
Buffer.BlockCopy(salt, 0, saltedPassword, passwordBytes.Length, salt.Length);
|
||||
byte[] hashBytes = sha256.ComputeHash(saltedPassword);
|
||||
return (Convert.ToBase64String(salt), Convert.ToBase64String(hashBytes));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static bool VerifyPassword(string inputPassword, string storedSalt, string storedHash)
|
||||
{
|
||||
byte[] salt = Convert.FromBase64String(storedSalt);
|
||||
byte[] passwordBytes = Encoding.UTF8.GetBytes(inputPassword);
|
||||
byte[] saltedPassword = new byte[passwordBytes.Length + salt.Length];
|
||||
Buffer.BlockCopy(passwordBytes, 0, saltedPassword, 0, passwordBytes.Length);
|
||||
Buffer.BlockCopy(salt, 0, saltedPassword, passwordBytes.Length, salt.Length);
|
||||
using (SHA256 sha256 = SHA256.Create())
|
||||
{
|
||||
byte[] hashBytes = sha256.ComputeHash(saltedPassword);
|
||||
string inputHash = Convert.ToBase64String(hashBytes);
|
||||
return inputHash == storedHash;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
10
README.md
10
README.md
@@ -2,7 +2,15 @@
|
||||
|
||||
TO-DO
|
||||
1) MariaDb online
|
||||
2) MarketDataServer see dotnet add package Microsoft.AspNet.WebApi.SelfHost --version 5.3.0
|
||||
2) MarketDataServer
|
||||
dotnet add package Microsoft.AspNet.WebApi.SelfHost --version 5.3.0
|
||||
dotnet add package System.ServiceModel.Primitives --version 4.0.0
|
||||
|
||||
Please use the Microsoft.AspNet.WebApi.OwinSelfHost package for new projects.
|
||||
Microsoft.AspNet.WebApi.OwinSelfHost
|
||||
|
||||
dotnet add package Microsoft.AspNet.WebApi.OwinSelfHost
|
||||
|
||||
3) IPMonitor
|
||||
4) Models
|
||||
|
||||
|
||||
Reference in New Issue
Block a user