예제 #1
0
    /// <summary>
    /// 获取哈希之后的字符串
    /// </summary>
    /// <param name="type">哈希类型</param>
    /// <param name="source">源</param>
    /// <param name="key">key</param>
    /// <param name="isLower">是否是小写</param>
    /// <returns>哈希算法处理之后的字符串</returns>
    public static string GetHashedString(this IHashGenerater _, HashType type, byte[] source, byte[]?key, bool isLower = false)
    {
        if (null == source)
        {
            return(string.Empty);
        }
        var hashedBytes = GetHashedBytes(_, type, source, key);
        var sbText      = new StringBuilder();

        if (hashedBytes is not null && hashedBytes.Any())
        {
            if (isLower)
            {
                foreach (var b in hashedBytes)
                {
                    sbText.Append(b.ToString("x2"));
                }
            }
            else
            {
                foreach (var b in hashedBytes)
                {
                    sbText.Append(b.ToString("X2"));
                }
            }
        }
        return(sbText.ToString());
    }
예제 #2
0
    /// <summary>
    /// 计算字符串Hash值
    /// </summary>
    /// <param name="type">hash类型</param>
    /// <param name="str">要hash的字符串</param>
    /// <param name="encoding">编码类型</param>
    /// <returns>hash过的字节数组</returns>
    public static byte[]? GetHashedBytes(this IHashGenerater _, HashType type, string str, Encoding encoding)
    {
        if (str is null)
        {
            throw new ArgumentNullException(nameof(str));
        }

        var bytes = encoding.GetBytes(str);

        return(GetHashedBytes(_, type, bytes));
    }
예제 #3
0
    /// <summary>
    /// 获取Hash后的字节数组
    /// </summary>
    /// <param name="type">哈希类型</param>
    /// <param name="key">key</param>
    /// <param name="bytes">原字节数组</param>
    /// <returns></returns>
    public static byte[]? GetHashedBytes(this IHashGenerater _, HashType type, byte[] bytes, byte[]?key)
    {
        if (null == bytes)
        {
            return(bytes);
        }

        HashAlgorithm?algorithm = null;

        try
        {
            if (key == null)
            {
                algorithm = type switch
                {
                    HashType.MD5 => MD5.Create(),
                    HashType.SHA1 => SHA1.Create(),
                    HashType.SHA256 => SHA256.Create(),
                    HashType.SHA384 => SHA384.Create(),
                    HashType.SHA512 => SHA512.Create(),
                    _ => MD5.Create(),
                };
            }
            else
            {
                algorithm = type switch
                {
                    HashType.MD5 => new HMACMD5(key),
                    HashType.SHA1 => new HMACSHA1(key),
                    HashType.SHA256 => new HMACSHA256(key),
                    HashType.SHA384 => new HMACSHA384(key),
                    HashType.SHA512 => new HMACSHA512(key),
                    _ => new HMACMD5(key),
                };
            }
            return(algorithm.ComputeHash(bytes));
        }
        finally
        {
            algorithm?.Dispose();
        }
    }
예제 #4
0
 /// <summary>
 /// 计算字符串Hash值
 /// </summary>
 /// <param name="type">hash类型</param>
 /// <param name="source">source</param>
 /// <param name="isLower">isLower</param>
 /// <returns>hash过的字节数组</returns>
 public static string GetHashedString(this IHashGenerater _, HashType type, byte[] source, bool isLower) => GetHashedString(_, type, source, null, isLower);
예제 #5
0
 /// <summary>
 /// 获取哈希之后的字符串
 /// </summary>
 /// <param name="type">哈希类型</param>
 /// <param name="str">源字符串</param>
 /// <param name="key">key</param>
 /// <param name="encoding">编码类型</param>
 /// <param name="isLower">是否是小写</param>
 /// <returns>哈希算法处理之后的字符串</returns>
 public static string GetHashedString(this IHashGenerater _, HashType type, string str, string?key, Encoding encoding, bool isLower = false)
 {
     return(string.IsNullOrEmpty(str) ? string.Empty : GetHashedString(_, type, str.GetBytes(encoding), string.IsNullOrEmpty(key) ? null : encoding.GetBytes(key), isLower));
 }
예제 #6
0
 /// <summary>
 /// 获取哈希之后的字符串
 /// </summary>
 /// <param name="type">哈希类型</param>
 /// <param name="str">源字符串</param>
 /// <param name="encoding">编码类型</param>
 /// <param name="isLower">是否是小写</param>
 /// <returns>哈希算法处理之后的字符串</returns>
 public static string GetHashedString(this IHashGenerater _, HashType type, string str, Encoding encoding, bool isLower = false) => GetHashedString(_, type, str, null, encoding, isLower);
예제 #7
0
 /// <summary>
 /// 获取哈希之后的字符串
 /// </summary>
 /// <param name="type">哈希类型</param>
 /// <param name="str">源字符串</param>
 /// <param name="key">key</param>
 /// <param name="isLower">是否是小写</param>
 /// <returns>哈希算法处理之后的字符串</returns>
 public static string GetHashedString(this IHashGenerater _, HashType type, string str, string key, bool isLower = false) => GetHashedString(_, type, str, key, Encoding.UTF8, isLower);
예제 #8
0
 /// <summary>
 /// 获取Hash后的字节数组
 /// </summary>
 /// <param name="type">哈希类型</param>
 /// <param name="bytes">原字节数组</param>
 /// <returns></returns>
 public static byte[]? GetHashedBytes(this IHashGenerater _, HashType type, byte[] bytes) => GetHashedBytes(_, type, bytes, null);
예제 #9
0
 /// <summary>
 /// 获取哈希之后的字符串
 /// </summary>
 /// <param name="type">哈希类型</param>
 /// <param name="str">源字符串</param>
 /// <returns>哈希算法处理之后的字符串</returns>
 public static string GetHashedString(this IHashGenerater _, HashType type, string str) => GetHashedString(_, type, str, Encoding.UTF8);
예제 #10
0
 /// <summary>
 /// 计算字符串Hash值
 /// </summary>
 /// <param name="type">hash类型</param>
 /// <param name="str">要hash的字符串</param>
 /// <returns>hash过的字节数组</returns>
 public static byte[]? GetHashedBytes(this IHashGenerater _, HashType type, string str) => GetHashedBytes(_, type, str, Encoding.UTF8);