예제 #1
0
        public EncryptedData Encrypt(EncryptionStrength strength, string str)
        {
            if (string.IsNullOrWhiteSpace(str))
            {
                return(new EncryptedData {
                    IsEmpty = true
                });
            }

            var hash = Hash(strength, str, false);

            var ekey = _encryptionKey;

            using (var aes = Aes.Create())
            {
                aes.Key = Convert.FromBase64String(ekey);
                var encrypted = AesEncryption.EncryptStringToBytes_Aes(str, aes.Key, aes.IV);
                var result    = new byte[aes.IV.Length + encrypted.Length];
                aes.IV.CopyTo(result, 0);
                encrypted.CopyTo(result, 16);

                return(new EncryptedData
                {
                    IsEmpty = false,
                    Hash = hash,
                    Encrypted = Convert.ToBase64String(result)
                });
            }
        }
예제 #2
0
        public string GenerateRandomKey(EncryptionStrength strength, bool alphaNumericOnly = true)
        {
            switch (strength)
            {
            case EncryptionStrength.Sha256:
                var    hmac256 = new HMACSHA256();
                string key256  = Convert.ToBase64String(hmac256.Key);
                if (alphaNumericOnly)
                {
                    key256 = string.Join("", key256.Where(char.IsLetterOrDigit));
                }
                return(key256);

            case EncryptionStrength.Sha512:
                var    hmac512 = new HMACSHA512();
                string key512  = Convert.ToBase64String(hmac512.Key);
                if (alphaNumericOnly)
                {
                    key512 = string.Join("", key512.Where(char.IsLetterOrDigit));
                }

                return(key512);

            default:
                throw new ArgumentOutOfRangeException(nameof(strength), strength, null);
            }
        }
예제 #3
0
        public string Hash(EncryptionStrength strength, string source, bool caseInsensitive)
        {
            var hkey = _hashKey;

            if (caseInsensitive)
            {
                source = source?.ToUpperInvariant();
            }

            switch (strength)
            {
            case EncryptionStrength.Sha256:
                return(HmacSha256Hash.GetHash(source, hkey));

            case EncryptionStrength.Sha512:
                return(HmacSha512Hash.GetHash(source, hkey));

            default:
                throw new ArgumentOutOfRangeException(nameof(strength), strength, null);
            }
        }