using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace ServiceShared.Crypto { public static class ProtectedServiceRun { /// /// Verifies the SecureHash by password /// /// secure hash from the appsettings.json /// public static bool Verified(string secureHash) { bool result = false; if(string.IsNullOrEmpty(secureHash)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("SecureHash was not found in the appsettings.json"); Console.WriteLine("Please encrypt the string \"ServiceOutside\" with ServiceShared.Crypto.AES.Encryption method and store the value by SecureHash in the appsettings.json"); Console.ForegroundColor = ConsoleColor.White; } else { bool password_successfully = false; bool exited = false; string password = ""; ConsoleKeyInfo key; while (!password_successfully && !exited) { Console.Write("Please enter your master password: "); do { key = Console.ReadKey(true); if (key.Key == ConsoleKey.Escape) { exited = true; break; } else if (key.Key == ConsoleKey.Enter) { byte[] aesKey = AES.GetKey(password); string decrypted = AES.Decrypt(secureHash, aesKey); if(!string.IsNullOrEmpty(decrypted) && decrypted == "SecureHash") { AES.SetMemoryMasterKey(password); password_successfully = true; result = true; break; } else { password = ""; Console.Clear(); break; } } else { password += key.KeyChar; Console.Write("*"); } } while (key.Key != ConsoleKey.Escape && key.Key != ConsoleKey.Escape); } } Console.Clear(); return result; } } }