public static class EncryptUtil
{
    #region MD5加密

    /// <summary>
    /// MD5加密
    /// </summary>
    public static string Md532(this string value)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }

        var encoding = Encoding.UTF8;
        MD5 md5 = MD5.Create();
        return HashAlgorithmBase(md5, value, encoding);
    }

    /// <summary>
    /// 加权MD5加密
    /// </summary>
    public static string Md532(this string value, string salt)
    {
        return salt == null ? value.Md532() : (value + "『" + salt + "』").Md532();
    }

    #endregion

    #region SHA 加密

    /// <summary>
    /// SHA1 加密
    /// </summary>
    public static string Sha1(this string value)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }

        var encoding = Encoding.UTF8;
        SHA1 sha1 = new SHA1CryptoServiceProvider();
        return HashAlgorithmBase(sha1, value, encoding);
    }

    /// <summary>
    /// SHA256 加密
    /// </summary>
    public static string Sha256(this string value)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }

        var encoding = Encoding.UTF8;
        SHA256 sha256 = new SHA256Managed();
        return HashAlgorithmBase(sha256, value, encoding);
    }

    /// <summary>
    /// SHA512 加密
    /// </summary>
    public static string Sha512(this string value)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }
        var encoding = Encoding.UTF8;
        SHA512 sha512 = new SHA512Managed();
        return HashAlgorithmBase(sha512, value, encoding);
    }

    #endregion

    #region HMAC 加密

    /// <summary>
    /// HmacSha1 加密
    /// </summary>
    public static string HmacSha1(this string value, string keyVal)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }
        var encoding = Encoding.UTF8;
        byte[] keyStr = encoding.GetBytes(keyVal);
        HMACSHA1 hmacSha1 = new HMACSHA1(keyStr);
        return HashAlgorithmBase(hmacSha1, value, encoding);
    }

    /// <summary>
    /// HmacSha256 加密
    /// </summary>
    public static string HmacSha256(this string value, string keyVal)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }
        var encoding = Encoding.UTF8;
        byte[] keyStr = encoding.GetBytes(keyVal);
        HMACSHA256 hmacSha256 = new HMACSHA256(keyStr);
        return HashAlgorithmBase(hmacSha256, value, encoding);
    }

    /// <summary>
    /// HmacSha384 加密
    /// </summary>
    public static string HmacSha384(this string value, string keyVal)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }
        var encoding = Encoding.UTF8;
        byte[] keyStr = encoding.GetBytes(keyVal);
        HMACSHA384 hmacSha384 = new HMACSHA384(keyStr);
        return HashAlgorithmBase(hmacSha384, value, encoding);
    }

    /// <summary>
    /// HmacSha512 加密
    /// </summary>
    public static string HmacSha512(this string value, string keyVal)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }
        var encoding = Encoding.UTF8;
        byte[] keyStr = encoding.GetBytes(keyVal);
        HMACSHA512 hmacSha512 = new HMACSHA512(keyStr);
        return HashAlgorithmBase(hmacSha512, value, encoding);
    }

    /// <summary>
    /// HmacMd5 加密
    /// </summary>
    public static string HmacMd5(this string value, string keyVal)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }
        var encoding = Encoding.UTF8;
        byte[] keyStr = encoding.GetBytes(keyVal);
        HMACMD5 hmacMd5 = new HMACMD5(keyStr);
        return HashAlgorithmBase(hmacMd5, value, encoding);
    }

    /// <summary>
    /// HmacRipeMd160 加密
    /// </summary>
    public static string HmacRipeMd160(this string value, string keyVal)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }
        var encoding = Encoding.UTF8;
        byte[] keyStr = encoding.GetBytes(keyVal);
        HMACRIPEMD160 hmacRipeMd160 = new HMACRIPEMD160(keyStr);
        return HashAlgorithmBase(hmacRipeMd160, value, encoding);
    }

    #endregion

    #region AES 加密解密

    /// <summary>
    /// AES加密
    /// </summary>
    /// <param name="value">待加密字段</param>
    /// <param name="keyVal">密钥值</param>
    /// <param name="ivVal">加密辅助向量</param>
    /// <returns></returns>
    public static string AesStr(this string value, string keyVal, string ivVal)
    {
        if (value == null)
        {
            throw new ArgumentNullException("未将对象引用设置到对象的实例。");
        }

        var encoding = Encoding.UTF8;
        byte[] btKey = keyVal.FormatByte(encoding);
        byte[] btIv = ivVal.FormatByte(encoding);
        byte[] byteArray = encoding.GetBytes(value);
        string encrypt;
        Rijndael aes = Rijndael.Create();
        using (MemoryStream mStream = new MemoryStream())
        {
            using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write))
            {
                cStream.Write(byteArray, , byteArray.Length);
                cStream.FlushFinalBlock();
                encrypt = Convert.ToBase64String(mStream.ToArray());
            }
        }
        aes.Clear();
        return encrypt;
    }

    /// <summary>
    /// AES解密
    /// </summary>
    /// <param name="value">待加密字段</param>
    /// <param name="keyVal">密钥值</param>
    /// <param name="ivVal">加密辅助向量</param>
    /// <returns></returns>
    public static string UnAesStr(this string value, string keyVal, string ivVal)
    {
        var encoding = Encoding.UTF8;
        byte[] btKey = keyVal.FormatByte(encoding);
        byte[] btIv = ivVal.FormatByte(encoding);
        byte[] byteArray = Convert.FromBase64String(value);
        string decrypt;
        Rijndael aes = Rijndael.Create();
        using (MemoryStream mStream = new MemoryStream())
        {
            using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(btKey, btIv), CryptoStreamMode.Write))
            {
                cStream.Write(byteArray, , byteArray.Length);
                cStream.FlushFinalBlock();
                decrypt = encoding.GetString(mStream.ToArray());
            }
        }
        aes.Clear();
        return decrypt;
    }

    /// <summary>
    /// AES Byte类型 加密
    /// </summary>
    /// <param name="data">待加密明文</param>
    /// <param name="keyVal">密钥值</param>
    /// <param name="ivVal">加密辅助向量</param>
    /// <returns></returns>
    public static byte[] AesByte(this byte[] data, string keyVal, string ivVal)
    {
        ];
        Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length);
        ];
        Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length);
        byte[] cryptograph;
        Rijndael aes = Rijndael.Create();
        try
        {
            using (MemoryStream mStream = new MemoryStream())
            {
                using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write))
                {
                    cStream.Write(data, , data.Length);
                    cStream.FlushFinalBlock();
                    cryptograph = mStream.ToArray();
                }
            }
        }
        catch
        {
            cryptograph = null;
        }
        return cryptograph;
    }

    /// <summary>
    /// AES Byte类型 解密
    /// </summary>
    /// <param name="data">待解密明文</param>
    /// <param name="keyVal">密钥值</param>
    /// <param name="ivVal">加密辅助向量</param>
    /// <returns></returns>
    public static byte[] UnAesByte(this byte[] data, string keyVal, string ivVal)
    {
        ];
        Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length);
        ];
        Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length);
        byte[] original;
        Rijndael aes = Rijndael.Create();
        try
        {
            using (MemoryStream mStream = new MemoryStream(data))
            {
                using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read))
                {
                    using (MemoryStream originalMemory = new MemoryStream())
                    {
                        ];
                        int readBytes;
                        , buffer.Length)) > )
                        {
                            originalMemory.Write(buffer, , readBytes);
                        }

                        original = originalMemory.ToArray();
                    }
                }
            }
        }
        catch
        {
            original = null;
        }
        return original;
    }

    #endregion

    #region DES 加密解密

    /// <summary>
    /// DES 加密
    /// </summary>
    public static string Des(this string value, string keyVal, string ivVal)
    {
        try
        {
            byte[] data = Encoding.UTF8.GetBytes(value);
             ? keyVal.Substring(, ) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length >  ? ivVal.Substring(, ) : ivVal) };
            var desencrypt = des.CreateEncryptor();
            , data.Length);
            return BitConverter.ToString(result);
        }
        catch { return "转换出错!"; }
    }

    /// <summary>
    /// DES 解密
    /// </summary>
    public static string UnDes(this string value, string keyVal, string ivVal)
    {
        try
        {
            string[] sInput = value.Split("-".ToCharArray());
            byte[] data = new byte[sInput.Length];
            ; i < sInput.Length; i++)
            {
                data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
            }
             ? keyVal.Substring(, ) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length >  ? ivVal.Substring(, ) : ivVal) };
            var desencrypt = des.CreateDecryptor();
            , data.Length);
            return Encoding.UTF8.GetString(result);
        }
        catch { return "解密出错!"; }
    }

    #endregion

    #region BASE64 加密解密

    /// <summary>
    /// BASE64 加密
    /// </summary>
    /// <param name="value">待加密字段</param>
    /// <returns></returns>
    public static string Base64(this string value)
    {
        var btArray = Encoding.UTF8.GetBytes(value);
        , btArray.Length);
    }

    /// <summary>
    /// BASE64 解密
    /// </summary>
    /// <param name="value">待解密字段</param>
    /// <returns></returns>
    public static string UnBase64(this string value)
    {
        var btArray = Convert.FromBase64String(value);
        return Encoding.UTF8.GetString(btArray);
    }

    #endregion

    #region Base64加密解密
    /// <summary>
    /// Base64加密 可逆
    /// </summary>
    /// <param name="value">待加密文本</param>
    /// <returns></returns>
    public static string Base64Encrypt(string value)
    {
        return Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(value));
    }

    /// <summary>
    /// Base64解密
    /// </summary>
    /// <param name="ciphervalue">密文</param>
    /// <returns></returns>
    public static string Base64Decrypt(string ciphervalue)
    {
        return System.Text.Encoding.Default.GetString(System.Convert.FromBase64String(ciphervalue));
    }
    #endregion

    #region 内部方法

    /// <summary>
    /// 转成数组
    /// </summary>
    private static byte[] Str2Bytes(this string source)
    {
        source = source.Replace(" ", "");
        ];
        ; i < source.Length; i += ) buffer[i / ] = Convert.ToByte(source.Substring(i, ), );
        return buffer;
    }

    /// <summary>
    /// 转换成字符串
    /// </summary>
    private static string Bytes2Str(this IEnumerable<byte> source, string formatStr = "{0:X2}")
    {
        StringBuilder pwd = new StringBuilder();
        foreach (byte btStr in source) { pwd.AppendFormat(formatStr, btStr); }
        return pwd.ToString();
    }

    private static byte[] FormatByte(this string strVal, Encoding encoding)
    {
        , ).ToUpper());
    }

    /// <summary>
    /// HashAlgorithm 加密统一方法
    /// </summary>
    private static string HashAlgorithmBase(HashAlgorithm hashAlgorithmObj, string source, Encoding encoding)
    {
        byte[] btStr = encoding.GetBytes(source);
        byte[] hashStr = hashAlgorithmObj.ComputeHash(btStr);
        return hashStr.Bytes2Str();
    }

    #endregion

}

C# 常用加密解密帮助类的更多相关文章

  1. ASP.NET常用加密解密方法

    ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码           public static string ToMd5(string clearString)        ...

  2. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

  3. AES加密解密 助手类 CBC加密模式

    "; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...

  4. php加密解密功能类

    这两天突发奇想想要用php写一个对日常项目加密以及解密的功能,经过努力简单的封装了一个对php代码进行加密解密的类,一些思想也是来自于网络,初步测试用着还行,可以实现对指定项目的加密以及解密(只针对本 ...

  5. C# MD5加密解密帮助类

    /// <summary>    /// MD5加密解密帮助类    /// </summary>    public static class DESHelper    {  ...

  6. php加密解密处理类

    [PHP]代码 <?php /*=========================================================== = 版权协议: = GPL (The GN ...

  7. .Net(c#)加密解密工具类:

    /// <summary> /// .Net加密解密帮助类 /// </summary> public class NetCryptoHelper { #region des实 ...

  8. Base64加密解密工具类

    使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...

  9. php实现的三个常用加密解密功能函数示例

    目录 算法一: 算法二: 算法三(改进第一个加密之后的算法) 本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_ ...

随机推荐

  1. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  2. .Net组件程序设计之远程调用(二)

    .Net组件程序设计之远程调用(二) 激活模式 引用封送对象激活类型两种, 一种是客户端激活类型,一种是服务器端激活. 客户端激活对象 客户端激活方式:当客户端创建一个远程对象时,客户端得到的是一个新 ...

  3. 在Windows中安装Memcached

    Memcached是一个高并发的内存键值对缓存系统,它的主要作用是将数据库查询结果,内容,以及其它一些耗时的计算结果缓存到系统内存中,从而加速Web应用程序的响应速度. Memcached最开始是作为 ...

  4. Tomcat的目录结构

    bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe.tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动T ...

  5. JDK下载、安装、配置环境变量笔记

    自己总是在下载.安装.配置JDK的环境变量,但是这些需要的专业知识并不难,但有很多细节很重要,总是记不住,而且这些细节一旦出错影响还是很严重的,在网上查到的信息很多都比较零散,而且讲解得也不是很详细, ...

  6. PHP 知识点

    __tostring()     注:能够直接输出对象 class Ren { public $name; function Run() { echo "跑"; } functio ...

  7. LinQ to entities 不能识别方法“system.string.ToString(system.String)”.因此该方法无法转换为存储表达式

    [我也是刚研究IEnumerable和IQueryable]以下都是个人理解,仅供参考,如有错误欢迎指出~ 在EF里面,使用IQueryable和IEnumerable可以延迟加载. IQueryba ...

  8. Rust初步(六):在C#中使用Rust组件

    上一篇文章,我们通过实例比较了一下C#和Rust的性能表现,应该说在Release模式下面,Rust进行计算密集型的运算还是有些比较明显的优势的.那么,我们有没有可能,在C#中做一些快速应用开发,而一 ...

  9. Objective-C中的Block(闭包)

    学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过Javascript的小伙伴对闭包应该不陌生吧~学过PHP的应该也不陌生,在PHP5.3版本以后也 ...

  10. JavaSE高级之集合类

    ​下面的内容是对java中的集合类进行的总结,过段时间会分享java的网路编程,多线程等内容,欢迎批评指正. 1.Java中的集合是用来存放对象的,即集合是对象的集合,对象是集合的元素,java AP ...