コード例 #1
0
        public byte[] Protect(byte[] userData)
        {
            var armoredData       = cryptoProvider.Encrypt(userData);
            var hmacBytes         = hmacProvider.GenerateHmac(armoredData);
            var signedArmoredData = SecurityHelperMethods.MergeByteArrays(hmacBytes, armoredData);

            return(signedArmoredData);
        }
コード例 #2
0
        /// <summary>
        /// Computes the hash.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">data</exception>
        public byte[] ComputeHash(byte[] data)
        {
            if (data == null || data.Length == 0)
            {
                throw new ArgumentNullException(nameof(data));
            }
            var saltArray = SecurityHelperMethods.GenerateRandomSalt();

            return(ComputeHash(data, saltArray));
        }
コード例 #3
0
        /// <summary>
        /// Generates the key.
        /// </summary>
        /// <param name="keySize">Size of the key.</param>
        /// <returns></returns>
        public static string GenerateKey(int keySize)
        {
            using (var rijProvider = new RijndaelManaged {
                KeySize = keySize, BlockSize = 128
            })
            {
                rijProvider.GenerateKey();
                rijProvider.GenerateIV();

                var key = SecurityHelperMethods.MergeByteArrays(rijProvider.Key, rijProvider.IV);
                return(Convert.ToBase64String(key));
            }
        }
コード例 #4
0
        public byte[] ComputeHash(byte[] data, byte[] saltArray)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }
            if (saltArray == null)
            {
                throw new ArgumentNullException(nameof(saltArray));
            }

            using var derivedBytes = new Rfc2898DeriveBytes(data, saltArray, iterations);
            var hash       = derivedBytes.GetBytes(hashSize);
            var saltedHash = SecurityHelperMethods.MergeByteArrays(hash, saltArray);

            return(saltedHash);
        }
コード例 #5
0
        /// <summary>
        /// Computes the hash.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="saltArray">The salt array.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">data</exception>
        public byte[] ComputeHash(byte[] data, byte[] saltArray)
        {
            if (data == null || data.Length == 0)
            {
                throw new ArgumentNullException(nameof(data));
            }
            if (saltArray == null || saltArray.Length == 0)
            {
                throw new ArgumentNullException(nameof(saltArray));
            }

            using (var managedHashProvider = new SHA256Managed())
            {
                var saltedData = SecurityHelperMethods.MergeByteArrays(data, saltArray);

                var hash       = managedHashProvider.ComputeHash(saltedData);
                var saltedHash = SecurityHelperMethods.MergeByteArrays(hash, saltArray);

                return(saltedHash);
            }
        }
コード例 #6
0
        public bool VerifyHash(byte[] data, byte[] hash)
        {
            var salt = SecurityHelperMethods.ExtractRandomSalt(hashSize, hash);

            return(VerifyHash(data, hash, salt));
        }
コード例 #7
0
        public byte[] ComputeHash(byte[] data)
        {
            var saltArray = SecurityHelperMethods.GenerateRandomSalt();

            return(ComputeHash(data, saltArray));
        }