DES、RSA、RSA数字签名、MD5、SHA 加密解密代码

本文介绍了多种加密解密方法,包括DES和RSA算法的应用,以及如何使用RSA进行数字签名和验证。此外还提供了MD5和SHA系列哈希算法的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/// <summary>
    /// 作者:李照
    /// 时间:2014-06-05 15:56:23
    /// </summary>
    public static class EncryptionDecryption
    {
        #region 将byte[]数组转换为字符串
        /// <summary>
        /// 将byte[]数组转换为字符串,与FromBaseString()方法互逆
        /// </summary>
        /// <param name="inArray">需要转换的数组</param>
        /// <returns>返回字符串</returns>
        public static string ToBaseSting(byte[] inArray)
        {
            StringBuilder sb = new StringBuilder();
            foreach (byte b in inArray.ToArray())
            {
                sb.AppendFormat("{0:X2}", b);
            }
            return sb.ToString();
        }
        #endregion
        #region 将字符串转换为byte[]数组
        /// <summary>
        /// 将字符串转换为byte[]数组,与ToBaseSting()方法互逆
        /// </summary>
        /// <param name="s">需要转换的字符串</param>
        /// <returns>返回数组</returns>
        public static byte[] FromBaseString(string s)
        {
            byte[] inputByteArray = new byte[s.Length / 2];
            for (int x = 0; x < s.Length / 2; x++)
            {
                int i = (Convert.ToInt32(s.Substring(x * 2, 2), 16));
                inputByteArray[x] = (byte)i;
            }
            return inputByteArray;
        }
        #endregion
        #region DES加密解密
        #region 字符串加密
        /// <summary>
        /// DES加密--字符串
        /// </summary>
        /// <param name="encryptString">加密的字符串</param>
        /// <param name="sKey">密钥,要求为8位数</param>
        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
        public static string DESEncrypt(string encryptString, string sKey)
        {
            try
            {
                byte[] inputByteArray = Encoding.Default.GetBytes(encryptString);
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
                {
                    Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
                    IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
                })
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(inputByteArray, 0, inputByteArray.Length);
                            cs.FlushFinalBlock();
                            StringBuilder ret = new StringBuilder();
                            foreach (byte b in ms.ToArray())
                            {
                                ret.AppendFormat("{0:X2}", b);
                            }
                            //ret.ToString();
                            return ret.ToString();
                            //return Convert.ToBase64String(ms.ToArray());
                        }
                    }
                }

            }
            catch (Exception)
            {
                return encryptString;
            }
        }
        #endregion

        #region 字符串解密
        /// <summary>
        /// DES解密--字符串
        /// </summary>
        /// <param name="decryptString">解密字符串</param>
        /// <param name="sKey">揭秘密钥,要求8位和加密时相同</param>
        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
        public static string DESDecrypt(string decryptString, string sKey)
        {

            try
            {
                string result;
                //byte[] inputByteArray = Convert.FromBase64String(decryptString);
                byte[] inputByteArray = new byte[decryptString.Length / 2];
                for (int x = 0; x < decryptString.Length / 2; x++)
                {
                    int i = (Convert.ToInt32(decryptString.Substring(x * 2, 2), 16));
                    inputByteArray[x] = (byte)i;
                }
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
                {
                    Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
                    IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
                })
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(inputByteArray, 0, inputByteArray.Length);
                            cs.FlushFinalBlock();
                            result = Encoding.Default.GetString(ms.ToArray());
                        }
                    }
                }
                return result;
            }
            catch
            {
                return decryptString;
            }
        }
        #endregion

        #region 文件内容加密
        /// <summary>
        /// 文件加密   原理:将文件A内容复制到临时文件B,对B文件流循环进行读取,并把读取的文件流加密
        /// </summary>
        /// <param name="inFile">加密前文件的绝对路径</param>
        /// <param name="outFile">加密后文件的绝对路径</param>
        /// <param name="sKey">密钥要求为8位数</param>
        /// <returns>返回加密结果</returns>
        public static bool DESEncryptFile(string inFile, string outFile, string sKey)
        {
            try
            {
                if (!File.Exists(inFile))
                    return false;
                //读入流
                FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);
                //待写入流
                FileStream outFs = new FileStream(outFile, FileMode.Open, FileAccess.Write);
                outFs.SetLength(0);
                byte[] byteIn = new byte[100];
                long readLenght = 0;//当前读入流的长度
                long readSumLenght = inFs.Length;//读入流的总长度
                int everyLenght = 0;//每次读入流的长度
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
                {
                    Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
                    IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
                })
                {
                    using (CryptoStream cs = new CryptoStream(outFs, des.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        while (readLenght < readSumLenght)
                        {
                            everyLenght = inFs.Read(byteIn, 0, 100);
                            cs.Write(byteIn, 0, everyLenght);
                            readLenght += everyLenght;
                        }
                        cs.Close();
                        inFs.Close();
                        outFs.Close();
                        return true;
                    }
                }
            }
            catch (Exception)
            {

                return false;
            }
        }
        #endregion

        #region 文件内容解密
        /// <summary>
        /// 解密 -- 原理:将文件A内容复制到临时文件B,对B文件流循环进行读取,并把读取的文件流解密
        /// </summary>
        /// <param name="inFile">加密前文件的绝对路径</param>
        /// <param name="outFile">加密后文件的绝对路径</param>
        /// <param name="sKey">密钥要求为8位数</param>
        /// <returns></returns>
        public static bool DESDecryptFile(string inFile, string outFile, string sKey)
        {
            try
            {
                if (!File.Exists(inFile))
                    return false;
                //读入流
                FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);
                //待写入流
                FileStream outFs = new FileStream(outFile, FileMode.Open, FileAccess.Write);
                outFs.SetLength(0);
                byte[] byteIn = new byte[100];
                long readLenght = 0;//当前读入流的长度
                long readSumLenght = inFs.Length;//读入流的总长度
                int everyLenght = 0;//每次读入流的长度
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
                {
                    Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
                    IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
                })
                {
                    using (CryptoStream cs = new CryptoStream(outFs, des.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        //循环读取流
                        while (readLenght < readSumLenght)
                        {
                            everyLenght = inFs.Read(byteIn, 0, 100);
                            cs.Write(byteIn, 0, everyLenght);
                            readLenght += everyLenght;
                        }
                        cs.Close();
                        inFs.Close();
                        outFs.Close();
                    }
                }
                return true;
            }
            catch
            {
                return false;
            }
        }
        #endregion
        #endregion

        #region RSA 加密解密
        #region RSA 的密钥产成
        /// <summary>
        /// RSA 的密钥产生 产生私钥 和公钥 
        /// </summary>
        /// <param name="xmlKeys"></param>
        /// <param name="xmlPublicKey"></param>
        public static void RSAKey(out string xmlKeys, out string xmlPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            xmlKeys = rsa.ToXmlString(true);
            xmlPublicKey = rsa.ToXmlString(false);
        }
        #endregion
        #region RSA加密
        /// <summary>
        /// RSA加密----字符串
        /// 说明KEY必须是XML的行式,返回的是字符串 
        /// 在有一点需要说明!!该加密方式有长度限制的!! 
        /// </summary>
        /// <param name="encryptString">要加密的字符串</param>
        /// <param name="publicKey">公钥</param>
        /// <returns>加密后的字符串</returns>
        public static string RSAEncrypt(string encryptString, string publicKey)
        {
            string result;
            byte[] byteEncrypt;
            byte[] byteCypher;
            try
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(publicKey);
                byteEncrypt = (new UnicodeEncoding()).GetBytes(encryptString);
                //byteEncrypt = Encoding.GetEncoding("gb2312").GetBytes(encryptString);
                byteCypher = rsa.Encrypt(byteEncrypt, false);
                result = Convert.ToBase64String(byteCypher);
            }
            catch (Exception)
            {

                result = encryptString;
            }
            return result;
        }
        /// <summary>
        /// RSA加密----数组
        /// </summary>
        /// <param name="byteEncrypt">要加密的数组</param>
        /// <param name="publicKey">公钥</param>
        /// <returns>加密后的字符串</returns>
        public static string RSAEncrypt(byte[] byteEncrypt, string publicKey)
        {
            string result;
            byte[] byteCypher;
            try
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(publicKey);
                byteCypher = rsa.Encrypt(byteEncrypt, false);
                result = Convert.ToBase64String(byteCypher);
            }
            catch (Exception)
            {
                result = byteEncrypt.ToString();
            }
            return result;
        }

        #endregion
        #region RSA解密
        /// <summary>
        /// RSA解密--字符串
        /// </summary>
        /// <param name="decryptString">要解密的字符串</param>
        /// <param name="privateKey">私钥</param>
        /// <returns>解密后的字符串</returns>
        public static string RSADecrypt(string decryptString, string privateKey)
        {
            string result;
            byte[] byteDecrypt;
            byte[] byteDypher;
            try
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(privateKey);
                byteDecrypt = Convert.FromBase64String(decryptString);
                byteDypher = rsa.Decrypt(byteDecrypt, false);
                result = (new UnicodeEncoding()).GetString(byteDypher);
            }
            catch (Exception)
            {
                result = decryptString;
            }
            return result;
        }
        /// <summary>
        /// RSA解密--数组
        /// </summary>
        /// <param name="decryptString">要解密的数组</param>
        /// <param name="privateKey">私钥</param>
        /// <returns>解密后的字符串</returns>
        public static string RSADecrypt(byte[] byteDecrypt, string privateKey)
        {
            string result;
            byte[] byteDypher;
            try
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(privateKey);
                byteDypher = rsa.Decrypt(byteDecrypt, false);
                result = (new UnicodeEncoding()).GetString(byteDypher);
            }
            catch (Exception)
            {
                result = byteDecrypt.ToString();
            }
            return result;
        }
        #endregion
        #endregion

        #region RSA数字签名
        #region 获取MD5的Hash描述表
        /// <summary>
        /// 从字符串获取MD5的Hash描述表
        /// </summary>
        /// <param name="stringSource">需要获取的字符串</param>
        /// <param name="result">从字符串中取得MD5的Hash描述</param>
        /// <returns>true 获取成功 false 获取失败</returns>
        public static bool GetHash(string stringSource, ref byte[] result)
        {
            //从字符串中取得MD5的Hash描述 
            byte[] Buffer;
            HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
            Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(stringSource);
            result = MD5.ComputeHash(Buffer);

            return true;
        }

        /// <summary>
        /// 从字符串获取MD5的Hash描述表
        /// </summary>
        /// <param name="stringSource">需要获取的字符串</param>
        /// <param name="result">从字符串中取得MD5的Hash描述 </param>
        /// <returns>true 获取成功 false 获取失败</returns>
        public static bool GetHash(string stringSource, ref string result)
        {

            //从字符串中取得MD5的Hash描述 
            byte[] Buffer;
            byte[] HashData;
            HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
            Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(stringSource);
            HashData = MD5.ComputeHash(Buffer);

            result = Convert.ToBase64String(HashData);
            return true;

        }

        /// <summary>
        /// 从文件获取MD5的Hash描述表
        /// </summary>
        /// <param name="objFile">需要获取的文件</param>
        /// <param name="result">从文件中取得MD5的Hash描述 </param>
        /// <returns>true 获取成功 false 获取失败</returns>
        public static bool GetHash(FileStream objFile, ref byte[] result)
        {

            //从文件中取得MD5的Hash描述 
            HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
            result = MD5.ComputeHash(objFile);
            objFile.Close();

            return true;

        }

        /// <summary>
        /// 从文件获取MD5的Hash描述表
        /// </summary>
        /// <param name="objFile">需要获取的文件</param>
        /// <param name="result">从文件中取得MD5的Hash描述 </param>
        /// <returns>true 获取成功 false 获取失败</returns>
        public static bool GetHash(System.IO.FileStream objFile, ref string result)
        {
            byte[] HashData;
            HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
            HashData = MD5.ComputeHash(objFile);
            objFile.Close();

            result = Convert.ToBase64String(HashData);

            return true;

        }
        #endregion

        #region RSA签名
        /// <summary>
        /// RSA签名
        /// </summary>
        /// <param name="privateKey">私钥</param>
        /// <param name="eSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
        /// <param name="result">返回加密后签名字符串</param>
        /// <returns>是否成功签名</returns>
        public static bool RSASignature(string privateKey, string eSignatureString, ref string result)
        {
            byte[] HashbyteSignature;
            byte[] EncryptedSignatureData;
            try
            {
                HashbyteSignature = Convert.FromBase64String(eSignatureString);
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(privateKey);
                RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5 
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名 
                EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
                result = Convert.ToBase64String(EncryptedSignatureData);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// RSA签名
        /// </summary>
        /// <param name="privateKey">私钥</param>
        /// <param name="eSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
        /// <param name="result">返回加密后签名数组</param>
        /// <returns>是否成功签名</returns>
        public static bool RSASignature(string privateKey, string eSignatureString, ref byte[] result)
        {
            byte[] HashbyteSignature;
            try
            {
                HashbyteSignature = Convert.FromBase64String(eSignatureString);
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(privateKey);
                RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5 
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名 
                result = RSAFormatter.CreateSignature(HashbyteSignature);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// RSA签名
        /// </summary>
        /// <param name="privateKey">私钥</param>
        /// <param name="HashbyteSignature">MD5加密后的哈希描述表 数组(签名前的数据)</param>
        /// <param name="result">返回加密后签名数组</param>
        /// <returns>是否成功签名</returns>natureString"></param>
        public static bool RSASignature(string privateKey, byte[] eSignatureString, ref byte[] result)
        {
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(privateKey);
                RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5 
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名 
                result = RSAFormatter.CreateSignature(eSignatureString);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// RSA签名
        /// </summary>
        /// <param name="privateKey">私钥</param>
        /// <param name="eSignatureString">MD5加密后的哈希描述表 数组(签名前的数据)</param>
        /// <param name="result">返回加密后签名字符串</param>
        /// <returns>是否成功签名</returns>
        public static bool RSASignature(string privateKey, byte[] eSignatureString, ref string result)
        {
            byte[] EncryptedSignatureData;
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(privateKey);
                RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5 
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名 
                EncryptedSignatureData = RSAFormatter.CreateSignature(eSignatureString);
                result = Convert.ToBase64String(EncryptedSignatureData);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion

        #region RSA 签名验证

        /// <summary>
        /// RSA 签名验证
        /// </summary>
        /// <param name="publicKey">公钥</param>
        /// <param name="dSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
        /// <param name="dSignatureData">需要验证的签名数据  字符串 (签名后的数据)</param>
        /// <returns>验证结果 true 验证成功   false 验证失败</returns>
        public static bool RSASignatureValidation(string publicKey, string dSignatureString, string dSignatureData)
        {
            byte[] DeformatterData;
            byte[] HashbyteDeformatter;
            HashbyteDeformatter = Convert.FromBase64String(dSignatureString);
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            RSA.FromXmlString(publicKey);
            RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
            //指定解密的时候HASH算法为MD5 
            RSADeformatter.SetHashAlgorithm("MD5");

            DeformatterData = Convert.FromBase64String(dSignatureData);

            if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        /// <summary>
        /// RSA 签名验证
        /// </summary>
        /// <param name="publicKey">公钥</param>
        /// <param name="dSignatureString">MD5加密后的哈希描述表 数组(签名前的数据)</param>
        /// <param name="dSignatureData">需要验证的签名数据  字符串  (签名后的数据)</param>
        /// <returns>验证结果 true 验证成功   false 验证失败</returns>
        public static bool RSASignatureValidation(string publicKey, byte[] dSignatureString, string dSignatureData)
        {

            byte[] DeformatterData;

            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

            RSA.FromXmlString(publicKey);
            RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
            //指定解密的时候HASH算法为MD5 
            RSADeformatter.SetHashAlgorithm("MD5");

            DeformatterData = Convert.FromBase64String(dSignatureData);

            if (RSADeformatter.VerifySignature(dSignatureString, DeformatterData))
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        /// <summary>
        ///  RSA 签名验证
        /// </summary>
        /// <param name="publicKey">公钥</param>
        /// <param name="dSignatureString">MD5加密后的哈希描述表 数组(签名前的数据)</param>
        /// <param name="dSignatureData">需要验证的签名数据  数组 (签名后的数据)</param>
        /// <returns>验证结果 true 验证成功   false 验证失败</returns>
        public static bool RSASignatureValidation(string publicKey, byte[] dSignatureString, byte[] dSignatureData)
        {
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

            RSA.FromXmlString(publicKey);
            RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
            //指定解密的时候HASH算法为MD5 
            RSADeformatter.SetHashAlgorithm("MD5");

            if (RSADeformatter.VerifySignature(dSignatureString, dSignatureData))
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        /// <summary>
        /// RSA 签名验证
        /// </summary>
        /// <param name="publicKey">公钥</param>
        /// <param name="dSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
        /// <param name="dSignatureData">需要验证的签名数据  数组  (签名后的数据)</param>
        /// <returns>验证结果 true 验证成功   false 验证失败</returns>
        public static bool RSASignatureValidation(string publicKey, string dSignatureString, byte[] dSignatureData)
        {

            byte[] HashbyteDeformatter;

            HashbyteDeformatter = Convert.FromBase64String(dSignatureString);

            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

            RSA.FromXmlString(publicKey);
            RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
            //指定解密的时候HASH算法为MD5 
            RSADeformatter.SetHashAlgorithm("MD5");

            if (RSADeformatter.VerifySignature(HashbyteDeformatter, dSignatureData))
            {
                return true;
            }
            else
            {
                return false;
            }

        }
        #endregion
        #endregion
        #region MD5加密
        /// <summary>
        /// MD5加密
        /// </summary>
        /// <param name="encryptString">加密的字符串或文件绝对路径</param>
        /// <param name="encryptType">加密类型:1 字符串  2 程序or文件</param>
        /// <param name="encryptLength">加密的长度1 16位  2 32位</param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static bool MD5Encrypt(string encryptString, int encryptType, int encryptLength, ref string result)
        {
            try
            {
                using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
                {
                    switch (encryptLength)
                    {
                        case 1:
                            if (encryptType == 1)
                            {
                                result = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(encryptString)), 4, 8).Replace("-", "");
                            }
                            else if (encryptType == 2)
                            {
                                FileStream file = File.OpenRead(encryptString);
                                byte[] hash = md5.ComputeHash(file);
                                result = System.BitConverter.ToString(hash, 4, 8).Replace("-", "");
                            }
                            break;
                        case 2:
                            if (encryptType == 1)
                            {
                                result = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(encryptString))).Replace("-", "");
                            }
                            else if (encryptType == 2)
                            {
                                FileStream file = File.OpenRead(encryptString);
                                byte[] hash = md5.ComputeHash(file);
                                result = System.BitConverter.ToString(hash).Replace("-", "");
                            }
                            break;
                        default:
                            break;
                    }
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion

        #region SHA加密
        /// <summary>
        /// SHA加密
        /// </summary>
        /// <param name="encryptString">需要加密的字符串</param>
        /// <param name="encryptLength">加密的长度 1 输出160bit  SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
        /// <param name="result">加密后的字符串</param>
        /// <returns>返回加密结果 true 加密成功  false 加密失败</returns>
        public static bool SHAEncrypt(string encryptString, int encryptLength, ref string result)
        {
            byte[] resultByte;
            byte[] encryptByte = Encoding.UTF8.GetBytes(encryptString); ;
            try
            {
                switch (encryptLength)
                {
                    case 1:
                        using (SHA1Managed sha = new SHA1Managed())
                        {
                            resultByte = sha.ComputeHash(encryptByte);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    case 256:
                        using (SHA256Managed sha = new SHA256Managed())
                        {
                            resultByte = sha.ComputeHash(encryptByte);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    case 384:
                        using (SHA384Managed sha = new SHA384Managed())
                        {
                            resultByte = sha.ComputeHash(encryptByte);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    case 512:
                        using (SHA512Managed sha = new SHA512Managed())
                        {
                            resultByte = sha.ComputeHash(encryptByte);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    default:
                        break;
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// SHA加密
        /// </summary>
        /// <param name="encryptString">需要加密的数组</param>
        /// <param name="encryptLength">加密的长度 1 输出160bit  SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
        /// <param name="result">加密后的字符串</param>
        /// <returns>返回加密结果 true 加密成功  false 加密失败</returns>
        public static bool SHAEncrypt(byte[] encryptString, int encryptLength, ref string result)
        {
            byte[] resultByte;
            try
            {
                switch (encryptLength)
                {
                    case 1:
                        using (SHA1Managed sha = new SHA1Managed())
                        {
                            resultByte = sha.ComputeHash(encryptString);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    case 256:
                        using (SHA256Managed sha = new SHA256Managed())
                        {
                            resultByte = sha.ComputeHash(encryptString);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    case 384:
                        using (SHA384Managed sha = new SHA384Managed())
                        {
                            resultByte = sha.ComputeHash(encryptString);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    case 512:
                        using (SHA512Managed sha = new SHA512Managed())
                        {
                            resultByte = sha.ComputeHash(encryptString);
                            result = Convert.ToBase64String(resultByte);
                        }
                        break;
                    default:
                        break;
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// SHA加密
        /// </summary>
        /// <param name="encryptString">需要加密的字符串</param>
        /// <param name="encryptLength">加密的长度 1 输出160bit  SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
        /// <param name="result">加密后的数组</param>
        /// <returns>返回加密结果 true 加密成功  false 加密失败</returns>
        public static bool SHAEncrypt(string encryptString, int encryptLength, ref byte[] result)
        {

            byte[] encryptByte = Encoding.UTF8.GetBytes(encryptString); ;
            try
            {
                switch (encryptLength)
                {
                    case 1:
                        using (SHA1Managed sha = new SHA1Managed())
                        {
                            result = sha.ComputeHash(encryptByte);
                        }
                        break;
                    case 256:
                        using (SHA256Managed sha = new SHA256Managed())
                        {
                            result = sha.ComputeHash(encryptByte);
                        }
                        break;
                    case 384:
                        using (SHA384Managed sha = new SHA384Managed())
                        {
                            result = sha.ComputeHash(encryptByte);
                        }
                        break;
                    case 512:
                        using (SHA512Managed sha = new SHA512Managed())
                        {
                            result = sha.ComputeHash(encryptByte);
                        }
                        break;
                    default:
                        break;
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// SHA加密
        /// </summary>
        /// <param name="encryptString">需要加密的数组</param>
        /// <param name="encryptLength">加密的长度 1 输出160bit  SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
        /// <param name="result">加密后的数组</param>
        /// <returns>返回加密结果 true 加密成功  false 加密失败</returns>
        public static bool SHAEncrypt(byte[] encryptString, int encryptLength, ref byte[] result)
        {
            try
            {
                switch (encryptLength)
                {
                    case 1:
                        using (SHA1Managed sha = new SHA1Managed())
                        {
                            result = sha.ComputeHash(encryptString);
                        }
                        break;
                    case 256:
                        using (SHA256Managed sha = new SHA256Managed())
                        {
                            result = sha.ComputeHash(encryptString);
                        }
                        break;
                    case 384:
                        using (SHA384Managed sha = new SHA384Managed())
                        {
                            result = sha.ComputeHash(encryptString);
                        }
                        break;
                    case 512:
                        using (SHA512Managed sha = new SHA512Managed())
                        {
                            result = sha.ComputeHash(encryptString);
                        }
                        break;
                    default:
                        break;
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值