Added encryption for password.
This commit is contained in:
52
MarketDataLib/Security/Encryption.cs
Normal file
52
MarketDataLib/Security/Encryption.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user