public static string Encrypt(ShaMode mode, string input) { switch (mode) { case ShaMode.SHA256: using (SHA256Managed sha = new SHA256Managed()) { return(BitConverter.ToString(sha.ComputeHash(Encoding.ASCII.GetBytes(input))).Replace("-", "").ToLower()); } case ShaMode.SHA512: using (SHA512Managed sha = new SHA512Managed()) { return(BitConverter.ToString(sha.ComputeHash(Encoding.ASCII.GetBytes(input))).Replace("-", "").ToLower()); } default: return(string.Empty); } }
/// <summary> /// 以指定的编码方式计算字符串指定模式的SHA值。 /// </summary> /// <param name="input">需要计算SHA值的字符串。</param> /// <param name="encoding">字符串的编码方式。</param> /// <param name="mode">计算SHA的模式。</param> /// <returns>字符串对应的SHA值。</returns> /// <exception cref="ArgumentNullException">参数encoding为null时将抛出该异常。</exception> /// <exception cref="ArgumentException">传入不能识别的ShaMode时将抛出该异常。</exception> public static string ComputeSha(string input, Encoding encoding, ShaMode mode) { int length = Convert.ToInt32(mode); if (string.IsNullOrEmpty(input)) { return(string.Empty.PadLeft(length, '0')); } if (encoding == null) { throw new ArgumentNullException("encoding"); } byte[] buffer = encoding.GetBytes(input); StringBuilder builder = new StringBuilder(length); using (HashAlgorithm provider = Encryption.CreateShaProvider(mode)) { byte[] result = provider.ComputeHash(buffer); for (int i = 0; i < result.Length; i++) { builder.Append(result[i].ToString("X2")); } } return(builder.ToString()); }
/// <summary> /// 以UTF-8编码计算字符串指定模式的SHA值。 /// </summary> /// <param name="input">需要计算SHA值的字符串。</param> /// <param name="mode">计算SHA的模式。</param> /// <returns>字符串对应的SHA值。</returns> /// <exception cref="ArgumentException">传入不能识别的ShaMode时将抛出该异常。</exception> public static string ComputeSha(string input, ShaMode mode) { return(Encryption.ComputeSha(input, Encoding.UTF8, mode)); }