using System.Security.Cryptography; using System.Text; namespace Connected.Security.Cryptography { internal class CryptographyService : ICryptographyService { public byte[]? Hash(string value) { if (string.IsNullOrEmpty(value)) return null; using var md = MD5.Create(); return GetHash(md, value); } private static byte[] GetHash(MD5 hash, string value) { return hash.ComputeHash(Encoding.UTF8.GetBytes(value)); } public bool Verify(string value, byte[] existing) { if (value is null && existing is null) return false; if (!value.Any() && !existing.Any()) return false; using var md = MD5.Create(); var hash = GetHash(md, value); if (value.Length != hash.Length) return false; for (var i = 0; i < value.Length; i++) { if (value[i] != hash[i]) return false; } return true; } } }