• C# 常用加密方式


    ——————————————————————————MD5加密方式————————————————————————————-— 

    //tostring中的参数标示用何种格式来格式化字符串,其中X标示16进制,2表示两位
            //  string str1=byte.ToString("x");//str1="0";
            //  string str2=byte.ToString("x2");//str2="00";


            public static string GetMD5Encording(string str)
            {

                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] _byte = Encoding.Default.GetBytes(str);
                byte[] _byteRst = md5.ComputeHash(_byte);
                StringBuilder SBuilder = new StringBuilder();
                for (int i = 0; i < _byteRst.Length; i++)
                {
                    SBuilder.Append(_byteRst[i].ToString("x2"));
                }
                return SBuilder.ToString();
            }
        }

    ————————————————————————————对称加密—————————————————————————————

    using System.Text;

        using System.IO;

        using System;

        using System.Text.RegularExpressions;

        using System.Security.Cryptography;

        namespace LHCHIP.Common

        {

            /**//// <summary>

            /// 对称加密算法类

            /// </summary>

            public class DecryptEncrypt

            {

                /**//// <summary>

                /// 返回自身的一个类

                /// </summary>

                public static DecryptEncrypt MyDecryptEncrypt

               {

                    get

                   {

                        return new DecryptEncrypt();

                    }

                }

            private SymmetricAlgorithm mobjCryptoService;

            private string Key;

            /**//// <summary>

            /// 对称加密类的构造函数

            /// </summary>

            internal DecryptEncrypt()

            {

                mobjCryptoService = new RijndaelManaged();

                Key = "rrp(%&h70x89H$jgsfgfsI0456Ftma81&fvHrr&&76*h%(12lJ$lhj!y6&(*jkPer44a";

            }

            /**//// <summary>

            /// 获得密钥

            /// </summary>

            /// <returns>密钥</returns>

            private byte[] GetLegalKey()

            {

                string _TempKey = Key;

                mobjCryptoService.GenerateKey();

                byte[] bytTemp = mobjCryptoService.Key;

                int KeyLength = bytTemp.Length;

                if (_TempKey.Length > KeyLength)

             _TempKey = _TempKey.Substring(0, KeyLength);

                else if (_TempKey.Length < KeyLength)

                    _TempKey = _TempKey.PadRight(KeyLength, ' ');

                return ASCIIEncoding.ASCII.GetBytes(_TempKey);

            }

            /**//// <summary>

            /// 获得初始向量IV

            /// </summary>

            /// <returns>初试向量IV</returns>

            private byte[] GetLegalIV()

            {

                string _TempIV = "@afetj*Ghg7!rNIfsgr95GUqd9gsrb#GG7HBh(urjj6HJ($jhWk7&!hjjri%$hjk";

                mobjCryptoService.GenerateIV();

                byte[] bytTemp = mobjCryptoService.IV;

                int IVLength = bytTemp.Length;

                if (_TempIV.Length > IVLength)

                    _TempIV = _TempIV.Substring(0, IVLength);

                else if (_TempIV.Length < IVLength)

                    _TempIV = _TempIV.PadRight(IVLength, ' ');

                return ASCIIEncoding.ASCII.GetBytes(_TempIV);

            }

            /**//// <summary>

            /// 加密方法

            /// </summary>

            /// <param name="Source">待加密的串</param>

            /// <returns>经过加密的串</returns>

            public string Encrypto(string Source)

            {

                byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);

                MemoryStream ms = new MemoryStream();

                mobjCryptoService.Key = GetLegalKey();

                mobjCryptoService.IV = GetLegalIV();

                //创建对称加密器对象

            ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();

                //定义将数据流链接到加密转换的流

                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);

                cs.Write(bytIn, 0, bytIn.Length);

                cs.FlushFinalBlock();

                ms.Close();

                byte[] bytOut = ms.ToArray();

                return Convert.ToBase64String(bytOut);

            }

            /**//// <summary>

            /// 解密方法

            /// </summary>

            /// <param name="Source">待解密的串</param>

            /// <returns>经过解密的串</returns>

            public string Decrypto(string Source)

            {

                byte[] bytIn = Convert.FromBase64String(Source);

                MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);

                mobjCryptoService.Key = GetLegalKey();

                mobjCryptoService.IV = GetLegalIV();

                //创建对称解密器对象

                ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();

                //定义将数据流链接到加密转换的流

                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);

                StreamReader sr = new StreamReader(cs);

                return sr.ReadToEnd();

                }

            }

        }

    ————————————————————————DES加密————————————————————————————————
    using System;
    using System.Security.Cryptography;
    using System.IO;
    using System.Text;
    public class EncryptStringDES
    {
        public static void Main(String[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Usage: des_demo <string-to-encrypt>", args[0]);
                return;
            }
            // 使用UTF8函数加密输入参数
            UTF8Encoding utf8Encoding = new UTF8Encoding();
            byte[] inputByteArray = utf8Encoding.GetBytes(args[0].ToCharArray());
            // 方式一:调用默认的DES实现方法DES_CSP.
            DES des = DES.Create();
            // 方式二:直接使用DES_CSP()实现DES的实体
            //DES_CSP DES = new DES_CSP();
            // 初始化DES加密的密钥和一个随机的、8比特的初始化向量(IV)
            Byte[] key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
            Byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };
            des.Key = key;
            des.IV = IV;
            // 建立加密流
            SymmetricStreamEncryptor sse = des.CreateEncryptor();
            // 使用CryptoMemoryStream方法获取加密过程的输出
            CryptoMemoryStream cms = new CryptoMemoryStream();
            // 将SymmetricStreamEncryptor流中的加密数据输出到CryptoMemoryStream中
            sse.SetSink(cms);
            // 加密完毕,将结果输出到控制台
            sse.Write(inputByteArray);
            sse.CloseStream();
            // 获取加密数据
            byte[] encryptedData = cms.Data;
            // 输出加密后结果
            Console.WriteLine("加密结果:");
            for (int i = 0; i < encryptedData.Length; i++)
            {
                Console.Write("{0:X2} ", encryptedData[i]);
            }
            Console.WriteLine();
            //上面演示了如何进行加密,下面演示如何进行解密
            SymmetricStreamDecryptor ssd = des.CreateDecryptor();
            cms = new CryptoMemoryStream();
            ssd.SetSink(cms);
            ssd.Write(encryptedData);
            ssd.CloseStream();
            byte[] decryptedData = cms.Data;
            char[] decryptedCharArray = utf8Encoding.GetChars(decryptedData);
            Console.WriteLine("解密后数据:");
            Console.Write(decryptedCharArray);
            Console.WriteLine();
        }
    }
  • 相关阅读:
    Codeforces 912E
    Codeforces 912D
    洛谷P4980 【模板】Polya定理
    51nod1222最小公倍数计数
    15 Puzzle LightOJ
    loj2734「JOISC 2016 Day 2」女装大佬 || 洛谷P3615 如厕计划
    Jongmah Codeforces
    洛谷P4238【模板】多项式求逆
    洛谷P4721 【模板】分治 FFT
    FFT,NTT
  • 原文地址:https://www.cnblogs.com/Traner/p/2819974.html
Copyright © 2020-2023  润新知