【加密算法】SHA

一、简介

安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为SHA-2。SHA-1在许多安全协定中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的杂凑函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的杂凑算法。

二、实现

    /// <summary>
    /// SHA加密  不可逆  不推荐
    /// </summary>
    public class ShaHelper
    {
        /// <summary>
        /// SHA1加密 不可逆  不推荐使用
        /// </summary>
        /// <param name="plaintext"></param>
        /// <returns></returns>
        public static string Encrypt1(string plaintext)
        {
            SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
            byte[] byteArray = Encoding.UTF8.GetBytes(plaintext);
            byte[] bytResult = sha1.ComputeHash(byteArray);
            sha1.Clear();
            string strResult = BitConverter.ToString(bytResult);
            return strResult.Replace("-", "");
        }

        /// <summary>
        /// SHA256加密 不可逆
        /// </summary>
        /// <param name="plaintext"></param>
        /// <returns></returns>
        public static string Encrypt256(string plaintext)
        {
            SHA256Managed sha256 = new SHA256Managed();
            byte[] byteArray = Encoding.UTF8.GetBytes(plaintext);
            byte[] bytResult = sha256.ComputeHash(byteArray);
            sha256.Clear();

            string strResult = BitConverter.ToString(bytResult);
            return strResult.Replace("-", "");
        }

        /// <summary>
        /// SHA384加密 不可逆
        /// </summary>
        /// <param name="plaintext"></param>
        /// <returns></returns>
        public static string Encrypt384(string plaintext)
        {
            SHA384Managed sha384 = new SHA384Managed();
            byte[] byteArray = Encoding.UTF8.GetBytes(plaintext);
            byte[] bytResult = sha384.ComputeHash(byteArray);
            sha384.Clear();

            string strResult = BitConverter.ToString(bytResult);
            return strResult.Replace("-", "");
        }

        /// <summary>
        /// SHA512加密 不可逆
        /// </summary>
        /// <param name="plaintext"></param>
        /// <returns></returns>
        public static string Encrypt512(string plaintext)
        {
            SHA512Managed sha512 = new SHA512Managed();
            byte[] byteArray = Encoding.UTF8.GetBytes(plaintext);
            byte[] bytResult = sha512.ComputeHash(byteArray);
            sha512.Clear();

            string strResult = BitConverter.ToString(bytResult);
            return strResult.Replace("-", "");
        }
    }
原文地址:https://www.cnblogs.com/weiweixiang/p/10102983.html