zoukankan      html  css  js  c++  java
  • c# 加密解密帮助类

    using System;
    using System.Globalization;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    
    namespace Utils
    {
        /// <summary>
        /// 密码加密解密操作相关类
        /// </summary>
        public class PassWordHelper
        {
            
            #region MD5 - 32 加密
    
            /// <summary>
            /// MD5 - 32加密
            /// </summary>
            /// <param name="source">待加密字段</param>
            /// <returns></returns>
            public string Md5(string source)
            {
                MD5 md5 = MD5.Create();
                byte[] btStr = Encoding.UTF8.GetBytes(source);
                byte[] hashStr = md5.ComputeHash(btStr);
                StringBuilder pwd = new StringBuilder();
                foreach (byte bStr in hashStr) { pwd.Append(bStr.ToString("x2")); }
                return pwd.ToString();
            }
    
            /// <summary>
            /// 加盐MD5 -32 加密
            /// </summary>
            /// <param name="source">待加密字段</param>
            /// <param name="salt">盐巴字段</param>
            /// <returns></returns>
            public string Md5Salt(string source, string salt)
            {
                return salt.IsEmpty() ? source.Md5() : (source + "" + salt + "").Md5();
            }
    
            #endregion
    
            #region DES 加密解密
    
            /// <summary>
            /// DES 字符串型加密
            /// </summary>
            /// <param name="source">待加密字段</param>
            /// <param name="keyVal">8位密钥值</param>
            /// <param name="ivVal">8位加密辅助向量</param>
            /// <returns>类似:xQ969nexy964SXhkTuekUQ==</returns>
            public string DesStr(string source, string keyVal, string ivVal)
            {
                try
                {
                    byte[] btKey = Encoding.UTF8.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal);
                    byte[] btIv = Encoding.UTF8.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal);
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    using (MemoryStream ms = new MemoryStream())
                    {
                        byte[] inData = Encoding.UTF8.GetBytes(source);
                        try
                        {
                            using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write))
                            {
                                cs.Write(inData, 0, inData.Length);
                                cs.FlushFinalBlock();
                            }
                            return Convert.ToBase64String(ms.ToArray());
                        }
                        catch
                        {
                            return source;
                        }
                    }
                }
                catch { return "DES加密出错"; }
            }
    
            /// <summary>
            /// DES 字符串型解密
            /// </summary>
            /// <param name="source">待解密字段</param>
            /// <param name="keyVal">8位密钥值</param>
            /// <param name="ivVal">8位加密辅助向量</param>
            /// <returns></returns>
            public string UnDesStr(string source, string keyVal, string ivVal)
            {
                byte[] btKey = Encoding.UTF8.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal);
                byte[] btIv = Encoding.UTF8.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal);
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                using (MemoryStream ms = new MemoryStream())
                {
                    byte[] inData = Convert.FromBase64String(source);
                    try
                    {
                        using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIv), CryptoStreamMode.Write))
                        {
                            cs.Write(inData, 0, inData.Length);
                            cs.FlushFinalBlock();
                        }
                        return Encoding.UTF8.GetString(ms.ToArray());
                    }
                    catch
                    {
                        return source;
                    }
                }  
            }
    
            /// <summary>
            /// DES MAC地址型加密
            /// </summary>
            /// <param name="source">待加密字段</param>
            /// <param name="keyVal">8位密钥值</param>
            /// <param name="ivVal">8位加密辅助向量</param>
            /// <returns></returns>
            public string DesMac(string source, string keyVal, string ivVal)
            {
                try
                {
                    byte[] data = Encoding.UTF8.GetBytes(source);
                    var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) };
                    var desencrypt = des.CreateEncryptor();
                    byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
                    return BitConverter.ToString(result);
                }
                catch { return "转换出错!"; }
            }
    
            /// <summary>
            /// DES MAC地址型解密
            /// </summary>
            /// <param name="source">待解密字段</param>
            /// <param name="keyVal">8位密钥值</param>
            /// <param name="ivVal">8位加密辅助向量</param>
            /// <returns></returns>
            public string UnDesMac(string source, string keyVal, string ivVal)
            {
                try
                {
                    string[] sInput = source.Split("-".ToCharArray());
                    byte[] data = new byte[sInput.Length];
                    for (int i = 0; i < sInput.Length; i++)
                    {
                        data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
                    }
                    var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) };
                    var desencrypt = des.CreateDecryptor();
                    byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
                    return Encoding.UTF8.GetString(result);
                }
                catch { return "解密出错!"; }
            }
    
            #endregion
    
            #region RSA 加密解密
    
            //密钥对
            private const string PublicRsaKey = @"<RSAKeyValue><Modulus>x</Modulus><Exponent>e</Exponent></RSAKeyValue>";
            private const string PrivateRsaKey = @"<RSAKeyValue><Modulus>x</Modulus><Exponent>e</Exponent><P>p</P><Q>q</Q><DP>dp</DP><DQ>dq</DQ><InverseQ>iq</InverseQ><D>d</D></RSAKeyValue>";
    
            /// <summary>
            /// RSA 加密
            /// </summary>
            /// <param name="source">待加密字段</param>
            /// <returns></returns>
            public string Rsa(string source)
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(PublicRsaKey);
                var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), true);
                return Convert.ToBase64String(cipherbytes);
            }
    
            /// <summary>
            /// RSA解密
            /// </summary>
            /// <param name="source">待解密字段</param>
            /// <returns></returns>
            public string UnRsa(string source)
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.FromXmlString(PrivateRsaKey);
                var cipherbytes = rsa.Decrypt(Convert.FromBase64String(source), true);
                return Encoding.UTF8.GetString(cipherbytes);
            }
    
            #endregion
        }
    }
  • 相关阅读:
    Atitit 集团与个人的完整入口列表 attilax的完整入口 1. 集团与个人的完整入口列表 1 2. 流量入口概念 2 3. 流量入口的历史与发展 2 1.集团与个人的完整入口列表
    atitit 每季度日程表 每季度流程 v3 qaf.docx Ver history V2 add diary cyar data 3 cate V3 fix detail 3cate ,
    Atitit react 详细使用总结 绑定列表显示 attilax总结 1. 前言 1 1.1. 资料数量在百度内的数量对比 1 1.2. 版本16 v15.6.1 1 1.3. 引入js 2
    Atitit r2017 r3 doc list on home ntpc.docx
    Atitit r2017 ra doc list on home ntpc.docx
    Atiitt attilax掌握的前后技术放在简历里面.docx
    Atitit q2016 qa doc list on home ntpc.docx
    Atitit r7 doc list on home ntpc.docx 驱动器 D 中的卷是 p2soft 卷的序列号是 9AD0D3C8 D:\ati\r2017 v3 r01\
    Atitit 可移植性之道attilax著
    Atitit q2016 q5 doc list on home ntpc.docx
  • 原文地址:https://www.cnblogs.com/yanlovehan/p/5338033.html
Copyright © 2011-2022 走看看