Cleaned up the hashing code.
This commit is contained in:
Binary file not shown.
@@ -38,8 +38,10 @@ namespace SecureCore.Controllers
|
|||||||
[AcceptVerbs("POST")]
|
[AcceptVerbs("POST")]
|
||||||
public IActionResult Login(LoginInfo info)
|
public IActionResult Login(LoginInfo info)
|
||||||
{
|
{
|
||||||
var hash = Auth.HashPassword(info.Password, out string salt);
|
var hash = Auth.HashPassword(info.Password);
|
||||||
return Ok($"Session Key: {Auth.CreateSessionId()}{Environment.NewLine}Password Hash: {hash}{Environment.NewLine}Salt: {salt}{Environment.NewLine}");
|
var h2 = Auth.HashPassword("Nonesense", "vRWp9TP1nQDLGtDZrd2yuw==");
|
||||||
|
|
||||||
|
return Ok($"Session Key: {Auth.CreateSessionId()}{Environment.NewLine}Password Hash: {hash.Hash}{Environment.NewLine}Salt: {hash.Salt}{Environment.NewLine}{h2 == "+IGLf8scewY2LOObXqfF5IkIbhcEuPrMFc12d78jH6ZyBEMQI+Z9zixWgkQANeV3VYvURBEXIVI0/TPZrnML3w=="}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,41 +53,46 @@ namespace SecureCore.Controllers
|
|||||||
|
|
||||||
public static class Auth
|
public static class Auth
|
||||||
{
|
{
|
||||||
|
private static int Iterations { get; set; } = 100000;
|
||||||
|
private static KeyDerivationPrf KeyType { get; } = KeyDerivationPrf.HMACSHA512;
|
||||||
|
private static int KeySize { get; } = 512 / 8;
|
||||||
|
private static int SaltSize { get; } = 128 / 8; //128 bit salt
|
||||||
|
private static int SessionKeySize { get; } = 32; //32 bytes
|
||||||
|
|
||||||
public static string CreateSessionId()
|
public static string CreateSessionId()
|
||||||
{
|
{
|
||||||
var sessionId = new byte[32];
|
var sessionId = new byte[SessionKeySize];
|
||||||
|
|
||||||
GetRandomBytes(ref sessionId);
|
GetRandomBytes(ref sessionId);
|
||||||
|
|
||||||
return ConvertToHex(sessionId);
|
return Convert.ToBase64String(sessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string HashPassword(string password, out string saltString)
|
public static (string Hash, string Salt) HashPassword(string password)
|
||||||
{
|
{
|
||||||
//Generate a 128 bit salt
|
var salt = new byte[SaltSize];
|
||||||
var salt = new byte[128 / 8];
|
|
||||||
|
|
||||||
GetRandomBytes(ref salt);
|
GetRandomBytes(ref salt);
|
||||||
|
|
||||||
saltString = ConvertToHex(salt);
|
return (GetPasswordHash(password, salt), Convert.ToBase64String(salt));
|
||||||
|
|
||||||
return Convert.ToBase64String(KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA512, 50000, 512 / 8));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string ConvertToHex(byte[] bytes)
|
public static string HashPassword(string password, string hash)
|
||||||
{
|
{
|
||||||
var stringBuilder = new StringBuilder();
|
var salt = Convert.FromBase64String(hash);
|
||||||
|
|
||||||
foreach (var b in bytes)
|
return GetPasswordHash(password, salt);
|
||||||
stringBuilder.AppendFormat("{0:x2}", b);
|
}
|
||||||
|
|
||||||
return stringBuilder.ToString();
|
private static string GetPasswordHash(string password, byte[] salt)
|
||||||
|
{
|
||||||
|
return Convert.ToBase64String(KeyDerivation.Pbkdf2(password, salt, KeyType, Iterations, KeySize));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void GetRandomBytes(ref byte[] bytes)
|
private static void GetRandomBytes(ref byte[] bytes)
|
||||||
{
|
{
|
||||||
using(var rng = RandomNumberGenerator.Create())
|
using var rng = RandomNumberGenerator.Create();
|
||||||
rng.GetBytes(bytes);
|
rng.GetBytes(bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
".NETCoreApp,Version=v3.1": {
|
".NETCoreApp,Version=v3.1": {
|
||||||
"SecureCore/1.0.0": {
|
"SecureCore/1.0.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"Microsoft.AspNetCore.Cryptography.KeyDerivation": "5.0.1",
|
||||||
"Microsoft.AspNetCore.Antiforgery": "3.1.0.0",
|
"Microsoft.AspNetCore.Antiforgery": "3.1.0.0",
|
||||||
"Microsoft.AspNetCore.Authentication.Abstractions": "3.1.0.0",
|
"Microsoft.AspNetCore.Authentication.Abstractions": "3.1.0.0",
|
||||||
"Microsoft.AspNetCore.Authentication.Cookies": "3.1.0.0",
|
"Microsoft.AspNetCore.Authentication.Cookies": "3.1.0.0",
|
||||||
@@ -40,8 +41,6 @@
|
|||||||
"Microsoft.AspNetCore.Connections.Abstractions": "3.1.0.0",
|
"Microsoft.AspNetCore.Connections.Abstractions": "3.1.0.0",
|
||||||
"Microsoft.AspNetCore.CookiePolicy": "3.1.0.0",
|
"Microsoft.AspNetCore.CookiePolicy": "3.1.0.0",
|
||||||
"Microsoft.AspNetCore.Cors": "3.1.0.0",
|
"Microsoft.AspNetCore.Cors": "3.1.0.0",
|
||||||
"Microsoft.AspNetCore.Cryptography.Internal": "3.1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Cryptography.KeyDerivation": "3.1.0.0",
|
|
||||||
"Microsoft.AspNetCore.DataProtection.Abstractions": "3.1.0.0",
|
"Microsoft.AspNetCore.DataProtection.Abstractions": "3.1.0.0",
|
||||||
"Microsoft.AspNetCore.DataProtection": "3.1.0.0",
|
"Microsoft.AspNetCore.DataProtection": "3.1.0.0",
|
||||||
"Microsoft.AspNetCore.DataProtection.Extensions": "3.1.0.0",
|
"Microsoft.AspNetCore.DataProtection.Extensions": "3.1.0.0",
|
||||||
@@ -314,6 +313,31 @@
|
|||||||
"SecureCore.dll": {}
|
"SecureCore.dll": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Microsoft.AspNetCore.Cryptography.Internal/5.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.Internal.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.120.60107"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.Internal.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.AspNetCore.Cryptography.KeyDerivation/5.0.1": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.AspNetCore.Cryptography.Internal": "5.0.1"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.120.60107"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"compile": {
|
||||||
|
"lib/netstandard2.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
"Microsoft.AspNetCore.Antiforgery/3.1.0.0": {
|
"Microsoft.AspNetCore.Antiforgery/3.1.0.0": {
|
||||||
"compile": {
|
"compile": {
|
||||||
"Microsoft.AspNetCore.Antiforgery.dll": {}
|
"Microsoft.AspNetCore.Antiforgery.dll": {}
|
||||||
@@ -410,18 +434,6 @@
|
|||||||
},
|
},
|
||||||
"compileOnly": true
|
"compileOnly": true
|
||||||
},
|
},
|
||||||
"Microsoft.AspNetCore.Cryptography.Internal/3.1.0.0": {
|
|
||||||
"compile": {
|
|
||||||
"Microsoft.AspNetCore.Cryptography.Internal.dll": {}
|
|
||||||
},
|
|
||||||
"compileOnly": true
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Cryptography.KeyDerivation/3.1.0.0": {
|
|
||||||
"compile": {
|
|
||||||
"Microsoft.AspNetCore.Cryptography.KeyDerivation.dll": {}
|
|
||||||
},
|
|
||||||
"compileOnly": true
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.DataProtection.Abstractions/3.1.0.0": {
|
"Microsoft.AspNetCore.DataProtection.Abstractions/3.1.0.0": {
|
||||||
"compile": {
|
"compile": {
|
||||||
"Microsoft.AspNetCore.DataProtection.Abstractions.dll": {}
|
"Microsoft.AspNetCore.DataProtection.Abstractions.dll": {}
|
||||||
@@ -2014,6 +2026,20 @@
|
|||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
"sha512": ""
|
"sha512": ""
|
||||||
},
|
},
|
||||||
|
"Microsoft.AspNetCore.Cryptography.Internal/5.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-VGfj77RBkyWpPxvX6oSghE3DPObvg171HRdwr/t3aJQ9Y5cgaZE8BUNLhHZ0yBFa218r7e9Qou+DLGfRtve4CQ==",
|
||||||
|
"path": "microsoft.aspnetcore.cryptography.internal/5.0.1",
|
||||||
|
"hashPath": "microsoft.aspnetcore.cryptography.internal.5.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.AspNetCore.Cryptography.KeyDerivation/5.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-kYiQ5AZMKVIB+28+ImC6GihJTSh2Sr6iofiYtsOOnCbgCmNBljH4n+r8Qfocxv78xeeby5lwZorq05OvriDbOQ==",
|
||||||
|
"path": "microsoft.aspnetcore.cryptography.keyderivation/5.0.1",
|
||||||
|
"hashPath": "microsoft.aspnetcore.cryptography.keyderivation.5.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
"Microsoft.AspNetCore.Antiforgery/3.1.0.0": {
|
"Microsoft.AspNetCore.Antiforgery/3.1.0.0": {
|
||||||
"type": "referenceassembly",
|
"type": "referenceassembly",
|
||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
@@ -2094,16 +2120,6 @@
|
|||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
"sha512": ""
|
"sha512": ""
|
||||||
},
|
},
|
||||||
"Microsoft.AspNetCore.Cryptography.Internal/3.1.0.0": {
|
|
||||||
"type": "referenceassembly",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Cryptography.KeyDerivation/3.1.0.0": {
|
|
||||||
"type": "referenceassembly",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.DataProtection.Abstractions/3.1.0.0": {
|
"Microsoft.AspNetCore.DataProtection.Abstractions/3.1.0.0": {
|
||||||
"type": "referenceassembly",
|
"type": "referenceassembly",
|
||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
25f50bd832f636a416eb773cc8db7fa1c945bb2c
|
7632b3c3dac860a5ca892b30d9c2c673c6b08242
|
||||||
|
|||||||
@@ -18,3 +18,6 @@ C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\Secure
|
|||||||
C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\SecureCore.dll
|
C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\SecureCore.dll
|
||||||
C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\SecureCore.pdb
|
C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\SecureCore.pdb
|
||||||
C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\SecureCore.genruntimeconfig.cache
|
C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\SecureCore.genruntimeconfig.cache
|
||||||
|
C:\Users\admin\source\repos\SecureCore\SecureCore\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Cryptography.Internal.dll
|
||||||
|
C:\Users\admin\source\repos\SecureCore\SecureCore\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll
|
||||||
|
C:\Users\admin\source\repos\SecureCore\SecureCore\obj\Debug\netcoreapp3.1\SecureCore.csproj.CopyComplete
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user