zoukankan      html  css  js  c++  java
  • C# 加密解密

    MD5加密

    * message-digest algorithm 5
    * 单向加密,无法根据密文解密
    * 对输入的任意长度字符串,都产生一个128位的整体
    * using System.Security.Cryptography;

            /// <summary>
            /// 通过MD5算法,对指定字符串加密
            /// </summary>
            /// <param name="sPalin">指定明文</param>
            /// <returns>返回密文</returns>
            public string EncryptByMD5(string sPalin)
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] palinData = Encoding.UTF8.GetBytes(sPalin); // 可以自定义 字符编码
                byte[] encryptData = md5.ComputeHash(palinData);   // 将输入字符串 加密
                string vStr = Convert.ToBase64String(encryptData); // 将加密后的字节数组转换位加密字符串
    
                return vStr; // 返回密文
            }

    RSA加密、解密

    * 非对称加密,加密和解密使用不同的密钥
    * 目前最具影响力的公钥加密算法
    * 生产密钥很麻烦,分组长度太大
    * using System.Security.Cryptography;

            /// <summary>
            /// 通过RSA算法,对指定字符串加密
            /// </summary>
            /// <param name="sPalin">指定明文</param>
            /// <returns>返回密文</returns>
            public string EncryptByRSA(string sPalin)
            {
                CspParameters vParam = new CspParameters();
                vParam.KeyContainerName = "ch_dx_cuit";  // 密钥容器名称,与解密保持一致
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(vParam))
                {
                    byte[] palinData = Encoding.UTF8.GetBytes(sPalin);
                    byte[] encryptData = rsa.Encrypt(palinData, false);  // 加密
                    string vStr = Convert.ToBase64String(encryptData);   // 将加密后的字节数组转换位加密字符串
    
                    return vStr; // 返回密文
                }
            }
    
            /// <summary>
            /// 通过RSA算法,对指定密文解密
            /// </summary>
            /// <param name="sEncrypt">指定密文</param>
            /// <returns>返回明文</returns>
            public string DecryptByRSA(string sEncrypt)
            {
                CspParameters vParam = new CspParameters();
                vParam.KeyContainerName = "ch_dx_cuit";  // 密钥容器名称,与加密保持一致
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(vParam))
                {
                    byte[] encryptData = Convert.FromBase64String(sEncrypt);
                    byte[] decryptData = rsa.Decrypt(encryptData, false);
                    string vStr = Encoding.UTF8.GetString(decryptData);
    
                    return vStr; // 返回明文
                }
            }

    DES加密、解密

    * 对称加密算法,加密解密使用同一密钥,不安全
    * 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小
    * 使用 16 个循环,使用异或,置换,代换,移位操作

            /// <summary>
            /// 通过DES算法,对指定字符串加密
            /// </summary>
            /// <param name="sPalin">指定明文</param>
            /// <returns>返回密文</returns>
            public string EncryptByDES(string sPalin)
            {
                string sKey = "chdxcuit"; // 必须的,8位密钥。与解密保持一致
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    
                    byte[] palinData = Encoding.UTF8.GetBytes(sPalin);
                    MemoryStream ms = new MemoryStream();
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(palinData, 0, palinData.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    string vStr = Convert.ToBase64String(ms.ToArray());
                    ms.Close();
    
                    return vStr; // 返回密文
                }
            }
    
            /// <summary>
            /// 通过DES算法,对指定密文解密
            /// </summary>
            /// <param name="sEncrypt">指定密文</param>
            /// <returns>返回明文</returns>
            public string DecryptByDES(string sEncrypt)
            {
                string sKey = "chdxcuit"; // 8位密钥,与加密保持一致
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    
                    byte[] encryptData = Convert.FromBase64String(sEncrypt);
                    MemoryStream ms = new MemoryStream();
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(encryptData, 0, encryptData.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    string vStr = Encoding.UTF8.GetString(ms.ToArray());
                    ms.Close();
    
                    return vStr; // 返回明文
                }
            }

    http://www.cnblogs.com/CUIT-DX037/

  • 相关阅读:
    170308、oracle查看被锁的表和解锁
    网络安全、Web安全、渗透测试之笔经面经总结(二)
    网络安全、Web安全、渗透测试之笔经面经总结(一)
    Linux 磁盘新增、分区、挂载等
    需求文件requirements.txt的创建及使用
    每天00:00,MySQL定时弹出一个taskeng.exe
    解决 python中 使用tesserocr,File "tesserocr.pyx", line 2401, in tesserocr._tesserocr.image_to_text 报错问题
    ycharm调整代码长度分割线
    jenkins配置用户角色权限,根据不同权限显示视图、Job
    Python图片裁剪实例代码(如头像裁剪)
  • 原文地址:https://www.cnblogs.com/CUIT-DX037/p/6806271.html
Copyright © 2011-2022 走看看