• 实全加密解密


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ShiQuan.Security
    {
        /// <summary>
        /// Base64编码可用于在HTTP环境下传递较长的标识信息。
        /// </summary>
        public static class Base64Security
        {
            /// <summary>
            /// base64加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string EncryptBase64(this string input)
            {
                byte[] inputBytes = Encoding.UTF8.GetBytes(input);
    
                return Convert.ToBase64String(inputBytes);
            }
    
            /// <summary>
            /// base64解密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string DecryptBase64(this string input)
            {
                byte[] inputBytes = Convert.FromBase64String(input);
    
                return Encoding.UTF8.GetString(inputBytes);
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Security;
    
    namespace ShiQuan.Security
    {
        /// <summary>
        ///  DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。
        /// </summary>
        public static class DESSecurity
        {
            #region Des 加密、解密
    
            //DES加密秘钥,要求为8位  
            private static readonly string key = "ShiQuan$";
            /// <summary>
            /// DES数据加密
            /// </summary>
            /// <param name="targetValue">目标值</param>
            /// <returns>加密值</returns>
            public static string EncryptDES(this string input)
            {
                return Encrypt(input, key);
            }
            /// <summary>
            /// DES数据加密
            /// </summary>
            /// <param name="input">目标值</param>
            /// <param name="key">密钥</param>
            /// <returns>加密值</returns>
            public static string EncryptDES(this string input, string key)
            {
                return Encrypt(input, key);
            }
            /// <summary>
            /// DES 数据加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Encrypt(string input)
            {
                return Encrypt(input, key);
            }
            /// <summary>
            /// DES数据加密
            /// </summary>
            /// <param name="input">目标值</param>
            /// <param name="key">密钥</param>
            /// <returns>加密值</returns>
            public static string Encrypt(string input, string key)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                try
                {
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    byte[] inputByteArray = Encoding.Default.GetBytes(input);
                    des.Key = ASCIIEncoding.ASCII.GetBytes(MD5Security.Encrypt(key).ToUpper().Substring(0, 8));
                    des.IV = ASCIIEncoding.ASCII.GetBytes(MD5Security.Encrypt(key).ToUpper().Substring(0, 8));
    
                    System.IO.MemoryStream mStream = new System.IO.MemoryStream();
                    CryptoStream cs = new CryptoStream(mStream, des.CreateEncryptor(), CryptoStreamMode.Write);
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    /*2019-06-28 侯连文 转码有问题*/
                    //return Encoding.UTF8.GetString(mStream.ToArray());
                    StringBuilder result = new StringBuilder();
                    foreach (byte b in mStream.ToArray())
                    {
                        result.AppendFormat("{0:X2}", b);
                    }
                    return result.ToString();
                }
                catch
                {
                    return input;
                }
            }
    
    
            #endregion
    
            #region 解密
            /// <summary>
            /// DES数据解密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string DecryptDES(this string input)
            {
                return Decrypt(input, key);
            }
            /// <summary>
            /// DES数据解密
            /// </summary>
            /// <param name="targetValue"></param>
            /// <param name="key"></param>
            /// <returns></returns>
            public static string DecryptDES(this string input, string key)
            {
                return Decrypt(input, key);
            }
            /// <summary>
            /// 解密数据
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Decrypt(string input)
            {
                return Decrypt(input, key);
            }
            /// <summary>
            /// 解密数据
            /// </summary>
            /// <param name="input"></param>
            /// <param name="sKey"></param>
            /// <returns></returns>
            public static string Decrypt(string input, string key)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                int len = input.Length / 2;
                byte[] inputByteArray = new byte[len];
                int x, i;
                for (x = 0; x < len; x++)
                {
                    i = Convert.ToInt32(input.Substring(x * 2, 2), 16);
                    inputByteArray[x] = (byte)i;
                }
                des.Key = ASCIIEncoding.ASCII.GetBytes(MD5Security.Encrypt(key).ToUpper().Substring(0, 8));
                des.IV = ASCIIEncoding.ASCII.GetBytes(MD5Security.Encrypt(key).ToUpper().Substring(0, 8));
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                /*2019-06-28 侯连文 中文返回乱码*/
                //return Encoding.UTF8.GetString(ms.ToArray());
                return Encoding.Default.GetString(ms.ToArray());
            }
    
            
            #endregion
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ShiQuan.Security
    {
        /// <summary>
        /// MD5主要是用来做数据校验的,用于确保信息传输完整一致。
        /// </summary>
        public static class MD5Security
        {
            /// <summary>
            /// MD5 加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string EncryptMD5(this string input)
            {
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                byte[] bytes = MD5Security.Encrypt(System.Text.Encoding.UTF8.GetBytes(input));
                return System.Text.Encoding.UTF8.GetString(bytes);
            }
    
            /// <summary>
            /// MD5 加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Encrypt(string input)
            {
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                byte[] bytes = MD5Security.Encrypt(System.Text.Encoding.UTF8.GetBytes(input));
                return System.Text.Encoding.UTF8.GetString(bytes);
            }
            /// <summary>
            /// MD5 加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static byte[] Encrypt(byte[] input)
            { 
                MD5 md5 = MD5.Create();
                return md5.ComputeHash(input);
            }
            
            /// <summary>
            /// 32位MD5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string EncryptMD532(this string input)
            {
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                return MD5Security.Encrypt32(System.Text.Encoding.UTF8.GetBytes(input));
            }
            /// <summary>
            /// 32位MD5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Encrypt32(string input)
            {
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                return MD5Security.Encrypt32(System.Text.Encoding.UTF8.GetBytes(input));
            }
            /// <summary>
            /// 32位MD5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Encrypt32(byte[] input)
            {
                string result = "";
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                byte[] s = MD5Security.Encrypt(input);
                // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
                for (int i = 0; i < s.Length; i++)
                {
                    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                    result = result + s[i].ToString("X");
                }
                return result;
            }
            /// <summary>
            /// 64位MD5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string EncryptMD564(this string input)
            {
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                return MD5Security.Encrypt64(System.Text.Encoding.UTF8.GetBytes(input));
            }
            /// <summary>
            /// 64位MD5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Encrypt64(string input)
            {
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                return MD5Security.Encrypt64(System.Text.Encoding.UTF8.GetBytes(input));
            }
            /// <summary>
            /// 64位MD5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Encrypt64(byte[] input)
            {
                //实例化一个md5对像
                MD5 md5 = MD5.Create();
                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                byte[] result = md5.ComputeHash(input);
                return Convert.ToBase64String(result);
            }
            /// <summary>
            /// 验证Md5 hash
            /// </summary>
            /// <param name="input">原字符串</param>
            /// <param name="encrypt32Str">原字符串的md5码</param>
            /// <returns></returns>
            public static bool VerifyMd5Hash(this string input, string encrypt32Str)
            {
                return input.VerifyMd532Hash(encrypt32Str);
            }
            /// <summary>
            /// 验证Md5 hash
            /// </summary>
            /// <param name="input">原字符串</param>
            /// <param name="encrypt32Str">原字符串的md5码</param>
            /// <returns></returns>
            public static bool VerifyMd532Hash(this string input, string encrypt32Str)
            {
                string hashOfInput = input.EncryptMD532();
                StringComparer comparer = StringComparer.OrdinalIgnoreCase;
                if (0 == comparer.Compare(hashOfInput, encrypt32Str))
                    return true;
                else
                    return false;
            }
            /// <summary>
            /// 验证Md5 hash
            /// </summary>
            /// <param name="input">原字符串</param>
            /// <param name="encrypt64Str">原字符串的md5码</param>
            /// <returns></returns>
            public static bool VerifyMd564Hash(this string input, string encrypt64Str)
            {
                string hashOfInput = input.EncryptMD564();
                StringComparer comparer = StringComparer.OrdinalIgnoreCase;
                if (0 == comparer.Compare(hashOfInput, encrypt64Str))
                    return true;
                else
                    return false;
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ShiQuan.Security
    {
        /// <summary>
        /// 非对称加密的代表算法是RSA算法。
        /// </summary>
        public static class RSASecurity
        {
            #region RSA加密、解密
            
            private static string RSAKey = "ShiQuan$";
            /// <summary>
            /// 生成RSA public key private key
            /// </summary>
            public static void GenerateRSAKey(string privatekeyFile, string publicKeyFile)
            {
                GenerateRSAKey(RSAKey, privatekeyFile, publicKeyFile);
            }
            /// <summary>
            /// 生成RSA public key private key
            /// </summary>
            public static void GenerateRSAKey(string keyContainerName, string privatekeyFile, string publicKeyFile)
            {
                CspParameters param = new CspParameters();
                param.KeyContainerName = keyContainerName;//密匙容器的名称,保持加密解密一致才能解密成功
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param);
                using (StreamWriter writer = new StreamWriter(privatekeyFile))
                {
                    writer.WriteLine(rsa.ToXmlString(true));
                }
    
                using (StreamWriter writer = new StreamWriter(publicKeyFile))
                {
                    writer.WriteLine(rsa.ToXmlString(false));
                }
            }
            /// <summary>
            /// RSA加密
            /// </summary>
            public static string EncryptRSA(this string input)
            {
                return input.EncryptRSA(RSAKey);
            }
    
            /// <summary>
            /// RSA加密
            /// </summary>
            public static string EncryptRSA(this string input, string keyContainerName)
            {
                CspParameters param = new CspParameters();
                param.KeyContainerName = keyContainerName;//密匙容器的名称,保持加密解密一致才能解密成功
                return input.EncryptRSA(param);
            }
    
            /// <summary>
            /// RSA加密
            /// </summary>
            public static string EncryptRSA(this string input, CspParameters param)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return input;
                }
                try
                {
                    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
                    {
                        byte[] plaindata = Encoding.Default.GetBytes(input);//将要加密的字符串转换为字节数组
                        byte[] encryptdata = rsa.Encrypt(plaindata, false);//将加密后的字节数据转换为新的加密字节数组
                        return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为字符串
                    }
                }
                catch
                {
                    return input;
                }
            }
    
            /// <summary>
            /// RSA加密
            /// </summary>
            public static string EncryptRSA(this string input, string publicKey, bool fOAEP = false)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return input;
                }
                try
                {
                    //publicKey = @"<RSAKeyValue><Modulus>pHfhtj8f/50PMyRq1MjcmbOSvrIIXRihzLTmrZKyo3o9ID6XEc5p4Tyjz9fbwYc8asfAF4GYJ3C/hPLvMST9M9WMKnT+sEsItG6jSVTSM0N580ORIusJRsoVBBgqczr0hNvaGmDxOvGeomqF1P/8tNQzY8L3a/szdrOSa0v6kW0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
                    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                    {
                        rsa.FromXmlString(publicKey);
                        byte[] plaindata = Encoding.Default.GetBytes(input);//将要加密的字符串转换为字节数组
                        byte[] encryptdata = rsa.Encrypt(plaindata, fOAEP);//将加密后的字节数据转换为新的加密字节数组
                        return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为字符串
                    }
                }
                catch
                {
                    return input;
                }
            }
    
            /// <summary>
            /// RSA解密
            /// </summary>
            public static string DecryptRSA(this string input)
            {
                return input.DecryptRSA(RSAKey);
            }
    
            /// <summary>
            /// RSA解密
            /// </summary>
            public static string DecryptRSA(this string input, string keyContainerName)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return input;
                }
                try
                {
                    CspParameters param = new CspParameters();
                    param.KeyContainerName = keyContainerName;
                    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))
                    {
                        byte[] encryptdata = Convert.FromBase64String(input);
                        byte[] decryptdata = rsa.Decrypt(encryptdata, false);
                        return Encoding.Default.GetString(decryptdata);
                    }
                }
                catch
                {
                    return input;
                }
            }
            /// <summary>
            /// RSA解密
            /// </summary>
            public static string DecryptRSA(this string input, string privateKey, bool fOAEP = false)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return input;
                }
                try
                {
                    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                    {
                        rsa.FromXmlString(privateKey);
                        byte[] encryptdata = Convert.FromBase64String(input);
                        byte[] decryptdata = rsa.Decrypt(encryptdata, fOAEP);
                        return Encoding.Default.GetString(decryptdata);
                    }
                }
                catch
                {
                    return input;
                }
            }
            #endregion
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ShiQuan.Security
    {
        /// <summary>
        /// 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。
        /// </summary>
        public static class SHA1Security
        {
            /// <summary>
            /// SHA1加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string EncryptSHA1(this string input)
            {
                byte[] inputBytes = Encoding.Default.GetBytes(input);
    
                SHA1 sha = new SHA1CryptoServiceProvider();
    
                byte[] result = sha.ComputeHash(inputBytes);
    
                StringBuilder sBuilder = new StringBuilder();
    
                for (int i = 0; i < result.Length; i++)
                {
                    sBuilder.Append(result[i].ToString("x2"));
                }
                return sBuilder.ToString();
            }
            /// <summary>
            /// SHA1验证
            /// </summary>
            /// <param name="input"></param>
            /// <param name="encrypt32Str"></param>
            /// <returns></returns>
            public static bool VerifySha1Hash(string input, string encrypt32Str)
            {
                string hashOfInput = input.EncryptSHA1();
                StringComparer comparer = StringComparer.OrdinalIgnoreCase;
                if (0 == comparer.Compare(hashOfInput, encrypt32Str))
                    return true;
                else
                    return false;
            }
        }
    }
  • 相关阅读:
    修改RedHat7的root用户密码
    Linux目录,rpm及top,vi命令简记
    Centos7或RedHat7下安装Mysql
    异常、线程
    File类
    JDBC的学习(一)
    MySql多表查询_事务_DCL(资料三)
    MySql约束_设计_备份还原(资料二)
    MySql基础_DDL_DML_DQL(资料一)
    算法小结(一)
  • 原文地址:https://www.cnblogs.com/Jeely/p/11721556.html
Copyright © 2020-2023  润新知