C# 加密解码各种方法

目录

一、加密解密介绍

二、MD5

三、SHA-x系列

四、DES / 3DES

五、RC2

六、AES

七、Base64

八、Rsa

九、参考文献 


一、加密解密介绍

不可逆加密:MD5、SHA-x系列
对称式加密:Des、3DES、RC2、AES、Base64 
非对称加密:Rsa

二、MD5

介绍:

            不可逆加密
            本质是通过哈希计算,可以对普通的数据信息进行加密,也可以对文件生成文件的摘要。

规则:

            不同长度的内容加密后加过都是 32 位
            加密不可逆
            原文差别很小,结果差别很大

主要用途:

           1、用户密码加密
           2、验证文件的完整性
           3、极速秒传,扫描文件的MD5跟已有的文件MD5比对,吻合表示文件已存在不用再上传;

核心代码:

///<summary>
/// MD5加密 -- 不可逆
/// </summary>
public class MD5Encrypt
{
    /// <summary>
        /// 静态调用
        /// </summary>
    public static MD5Encrypt MD5 { get { return new MD5Encrypt(); } }

    #region 方法
        /// <summary>
        /// MD5加密,和动网上的16/32位MD5加密结果相同
        /// 使用的UTF8编码
        /// </summary>
        /// <param name="source">待加密字串</param>
        /// <param name="length">16或32值之一,其它则采用.net默认MD5加密算法</param>
        /// <returns>加密后的字串</returns>
        internal string Encrypt(string source, int length = 32)//默认参数
        {
            if (string.IsNullOrEmpty(source)) return string.Empty;

            HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm;

            //转换成字节码
            byte[] bytes = Encoding.UTF8.GetBytes(source);//这里需要区别编码的
            //根据字节码转换成16个Hash码
            byte[] hashValue = provider.ComputeHash(bytes);

            //字符拼接
            StringBuilder sb = new StringBuilder();
            switch (length)
            {
                case 16://16位密文是32位密文的9到24位字符
                    for (int i = 4; i < 12; i++)
                    {
                        sb.Append(hashValue[i].ToString("x2"));
                    }
                    break;
                case 32:
                    for (int i = 0; i < 16; i++)
                    {
                        sb.Append(hashValue[i].ToString("x2"));
                    }
                    break;
                default:
                    for (int i = 0; i < hashValue.Length; i++)
                    {
                        sb.Append(hashValue[i].ToString("x2"));
                    }
                    break;
            }
            return sb.ToString();
        }

        /// <summary>
        /// 获取文件的MD5摘要
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        internal string AbstractFile(string fileName)
        {
            using (FileStream file = new FileStream(fileName, FileMode.Open))
            {
                return AbstractFile(file);
            }
        }

        /// <summary>
        /// 根据stream获取文件摘要
        /// </summary>
        /// <param name="stream">文件流</param>
        /// <returns></returns>
        internal string AbstractFile(Stream stream)
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            //获取16个Hash码
            byte[] retVal = md5.ComputeHash(stream);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < retVal.Length; i++)
            {
                sb.Append(retVal[i].ToString("x2"));
            }
            return sb.ToString();
        } 
        #endregion
}

代码应用:

internal class Program
{
    static void Main(string[] args)
    {
        string a = "111";
        string result = MD5Encrypt.MD5.Encrypt(a);
        Console.WriteLine(result); //结果显示:698d51a19d8a121ce581499d7b701668

        string path_a = @"C:\Users\Rush\Desktop\C#\加密解码各种方法\a.txt";
        string path_b = @"C:\Users\Rush\Desktop\C#\加密解码各种方法\b.txt";
        string p_a = MD5Encrypt.MD5.AbstractFile(path_a);
        Console.WriteLine(p_a); //结果显示:f9c2a9f852c31d2a8bb619033b4246f1

        string p_b = MD5Encrypt.MD5.AbstractFile(path_b);
        Console.WriteLine(p_b); //结果显示:f9c2a9f852c31d2a8bb619033b4246f1
    }
}

三、SHA-x系列

介绍:

        SHA-1(安全哈希算法,也称为安全哈希标准)是由美国政府发布的一种加密哈希算法。
        可以根据任意长度的字符串生成160位的哈希值。HMACSHA1接受任何大小的密钥,并产生长度为160位的哈希序列。 
        比MD5安全性更高

主要用途:

                数字签名、数字时间戳、数字证书 

注:SHA-1 已经被破解,不推荐使用

核心代码:

/// <summary>
/// SHA加密 -- 不可逆
/// </summary>
public class SHAEncrypt
{
    /// <summary>
    /// 静态方法
    /// </summary>
    public static SHAEncrypt SHA { get { return new SHAEncrypt(); } }

    #region 方法
    /// <summary>
    /// SHA1加密
    /// </summary>
    /// <param name="encryptText">待加密文本</param>
    /// <returns>加密后的字符串。(40个字符)</returns>
    public string SHA1Encrypt(string encryptText)
    {
        return SHAxEncrypt(new SHA1CryptoServiceProvider(), encryptText, true);
    }
    /// <summary>
    /// SHA1加密
    /// </summary>
    /// <param name="encryptText">待加密文本</param>
    /// <param name="textLength">
    /// true -- 40个字符(默认)
    /// false -- 28个字符
    /// </param>
    /// <returns>加密后的字符串。(28个字符)</returns>
    public string SHA1Encrypt(string encryptText, bool textLength)
    {
        return SHAxEncrypt(new SHA1CryptoServiceProvider(), encryptText, textLength);
    }


    /// <summary>
    /// SHA256加密
    /// </summary>
    /// <param name="encryptText">待加密文本</param>
    /// <returns>加密后的字符串。(64个字符)</returns>
    public string SHA256Encrypt(string encryptText)
    {
        return SHAxEncrypt(new SHA256CryptoServiceProvider(), encryptText, true);
    }
    /// <summary>
    /// SHA256加密
    /// </summary>
    /// <param name="encryptText">待加密文本</param>
    /// <param name="textLength">
    /// true -- 64个字符(默认)
    /// false -- 44个字符
    /// </param>
    /// <returns>加密后的字符串。(44个字符)</returns>
    public string SHA256Encrypt(string encryptText, bool textLength)
    {
        return SHAxEncrypt(new SHA256CryptoServiceProvider(), encryptText, textLength);
    }


    /// <summary>
    /// SHA384加密
    /// </summary>
    /// <param name="encryptText">待加密文本</param>
    /// <returns>加密后的字符串。(96个字符)</returns>
    public string SHA384Encrypt(string encryptText)
    {
        return SHAxEncrypt(new SHA384CryptoServiceProvider(), encryptText, true);
    }
    /// <summary>
    /// SHA384加密
    /// </summary>
    /// <param name="encryptText">待加密文本</param>
    /// <param name="textLength">
    /// true -- 96个字符(默认)
    /// false -- 64个字符
    /// </param>
    /// <returns>加密后的字符串。(64个字符)<
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值