zoukankan      html  css  js  c++  java
  • DotNet中用到的加密算法总结[转]

      1public class CryptUtil
      2    {
      3        public static string DecryptString(string input)
      4        {
      5            if (input.Equals(string.Empty))
      6            {
      7                return input;
      8            }

      9
     10            byte[] byKey = {0x630x680x650x6E0x790x750x610x6E};
     11            byte[] IV = {0xFE0xDC0xBA0x980x760x540x320x10};
     12            byte[] inputByteArray = new Byte[input.Length];
     13            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
     14            inputByteArray = Convert.FromBase64String(input);
     15            MemoryStream ms = new MemoryStream();
     16            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
     17            cs.Write(inputByteArray, 0, inputByteArray.Length);
     18            cs.FlushFinalBlock();
     19            Encoding encoding = new UTF8Encoding();
     20            return encoding.GetString(ms.ToArray());
     21        }

     22
     23        public static string EncryptString(string input)
     24        {
     25            if (input.Equals(string.Empty))
     26            {
     27                return input;
     28            }

     29
     30            byte[] byKey = {0x630x680x650x6E0x790x750x610x6E};
     31            byte[] IV = {0xFE0xDC0xBA0x980x760x540x320x10};
     32            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
     33            byte[] inputByteArray = Encoding.UTF8.GetBytes(input);
     34            MemoryStream ms = new MemoryStream();
     35            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
     36            cs.Write(inputByteArray, 0, inputByteArray.Length);
     37            cs.FlushFinalBlock();
     38            return Convert.ToBase64String(ms.ToArray());
     39        }

     40        /// <summary>
     41        /// DES + Base64 加密
     42        /// </summary>
     43        /// <param name="input">明文字符串</param>
     44        /// <returns>已加密字符串</returns>

     45        public static string DesBase64Encrypt(string input)
     46        {
     47            System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
     48            des.Mode = System.Security.Cryptography.CipherMode.ECB;
     49            ICryptoTransform ct;
     50            MemoryStream ms;
     51            CryptoStream cs;
     52            byte[] byt;
     53            byte[] Key = new byte[8]{56,50,55,56,56,55,49,49}
     54            byte[] IV = new byte[8]{0,0,0,0,0,0,0,0};
     55
     56            ct = des.CreateEncryptor(Key, IV);
     57
     58            byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
     59            
     60            ms = new MemoryStream();
     61            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
     62            cs.Write(byt, 0, byt.Length);
     63            cs.FlushFinalBlock();
     64
     65            cs.Close();
     66
     67            byte[] answer = ms.ToArray();
     68            for(int j=0;j<answer.Length;j++)
     69            {
     70                Console.Write(answer[j].ToString()+ " ");
     71            }

     72            Console.WriteLine();
     73            return Convert.ToBase64String(ms.ToArray()); // 将加密的 byte 数组依照 Base64 编码转换成字符串
     74        }

     75
     76        /// <summary>
     77        /// DES + Base64 解密
     78        /// </summary>
     79        /// <param name="input">密文字符串</param>
     80        /// <returns>解密字符串</returns>

     81        public static string DesBase64Decrypt(string input)
     82        {
     83            System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
     84            des.Mode = System.Security.Cryptography.CipherMode.ECB;
     85            ICryptoTransform ct;
     86            MemoryStream ms;
     87            CryptoStream cs;
     88            byte[] byt;
     89            byte[] Key = new byte[8]{56,50,55,56,56,55,49,49}
     90            byte[] IV = new byte[8]{0,0,0,0,0,0,0,0};
     91            
     92            ct = des.CreateDecryptor(Key, IV);
     93            byt = Convert.FromBase64String(input); // 将 密文 以 Base64 编码转换成 byte 数组
     94
     95            ms = new MemoryStream();
     96            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
     97            cs.Write(byt, 0, byt.Length);
     98            cs.FlushFinalBlock();
     99
    100            cs.Close();
    101
    102            return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
    103        }

    104        
    105        
    106        
    107        /// <summary>
    108        /// DES + Base64 加密
    109        /// </summary>
    110        /// <param name="input">明文字符串</param>
    111        /// <returns>已加密字符串</returns>

    112        public static string DesBase64EncryptForID5(string input)
    113        {
    114            System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
    115            des.Mode = System.Security.Cryptography.CipherMode.CBC;
    116            ICryptoTransform ct;
    117            MemoryStream ms;
    118            CryptoStream cs;
    119            byte[] byt;
    120            byte[] Key = new byte[8]{56,50,55,56,56,55,49,49}
    121            byte[] IV = new byte[8]{56,50,55,56,56,55,49,49}
    122
    123            ct = des.CreateEncryptor(Key, IV);
    124
    125            byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
    126            
    127            ms = new MemoryStream();
    128            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    129            cs.Write(byt, 0, byt.Length);
    130            cs.FlushFinalBlock();
    131
    132            cs.Close();
    133
    134            byte[] answer = ms.ToArray();
    135            for(int j=0;j<answer.Length;j++)
    136            {
    137                Console.Write(answer[j].ToString()+ " ");
    138            }

    139            Console.WriteLine();
    140            return Convert.ToBase64String(ms.ToArray()); // 将加密的 byte 数组依照 Base64 编码转换成字符串
    141        }

    142        
    143        
    144        /// <summary>
    145        /// DES + Base64 解密
    146        /// </summary>
    147        /// <param name="input">密文字符串</param>
    148        /// <returns>解密字符串</returns>

    149        public static string DesBase64DecryptForID5(string input)
    150        {
    151            System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
    152            des.Mode = System.Security.Cryptography.CipherMode.CBC;
    153            ICryptoTransform ct;
    154            MemoryStream ms;
    155            CryptoStream cs;
    156            byte[] byt;
    157            byte[] Key = new byte[8]{56,50,55,56,56,55,49,49}
    158            byte[] IV = new byte[8]{56,50,55,56,56,55,49,49}
    159            
    160            ct = des.CreateDecryptor(Key, IV);
    161            byt = Convert.FromBase64String(input); // 将 密文 以 Base64 编码转换成 byte 数组
    162
    163            ms = new MemoryStream();
    164            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    165            cs.Write(byt, 0, byt.Length);
    166            cs.FlushFinalBlock();
    167
    168            cs.Close();
    169
    170            return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
    171        }

    172        
    173
    174        /// <summary>
    175        /// 3DES 加密 Byte[] to HEX string
    176        /// </summary>
    177        /// <param name="input">明文字符串</param>
    178        /// <returns>已加密字符串</returns>

    179        public static string ThreeDesEncryptHEX(string input)
    180        {
    181            string result = "";
    182            System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
    183            des.Mode = System.Security.Cryptography.CipherMode.CBC;
    184            des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
    185            ICryptoTransform ct;
    186            MemoryStream ms;
    187            CryptoStream cs;
    188            byte[] byt;
    189            byte[] Key = new byte[24]{
    190                                         1,2,3,4,5,6,
    191                                         1,2,3,4,5,6,
    192                                         1,2,3,4,5,6,
    193                                         1,2,3,4,5,6
    194                                     }

    195            byte[] IV = new byte[8]{1,2,3,4,5,6,1,2};
    196
    197            ct = des.CreateEncryptor(Key, IV);
    198
    199            byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
    200            
    201            ms = new MemoryStream();
    202            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    203            cs.Write(byt, 0, byt.Length);
    204            cs.FlushFinalBlock();
    205
    206            cs.Close();
    207
    208            byte[] answer = ms.ToArray();
    209            for(int j=0;j<answer.Length;j++)
    210            {
    211                result += answer[j].ToString("x").PadLeft(2,'0');
    212            }

    213            return result;
    214        }

    215
    216        /// <summary>
    217        /// 3DES + HEX to byte[] 解密
    218        /// </summary>
    219        /// <param name="input">密文字符串</param>
    220        /// <returns>解密字符串</returns>

    221        public static string ThreeDesDecryptHEX(string input)
    222        {
    223            System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
    224            des.Mode = System.Security.Cryptography.CipherMode.CBC;
    225            des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
    226            ICryptoTransform ct;
    227            MemoryStream ms;
    228            CryptoStream cs;
    229            byte[] Key = new byte[24]{
    230                                         1,2,3,4,5,6,
    231                                         1,2,3,4,5,6,
    232                                         1,2,3,4,5,6,
    233                                         1,2,3,4,5,6
    234                                     }

    235            byte[] IV = new byte[8]{1,2,3,4,5,6,1,2};
    236            
    237            ct = des.CreateDecryptor(Key, IV);
    238            //byt = Convert.FromBase64String(input); // 将 密文 以 HEX to byte[]编码转换成 byte 数组
    239            if(input.Length<=1)
    240            {
    241                throw new Exception("encrypted HEX string is too short!");
    242            }

    243            byte[] byt = new byte[input.Length/2];
    244            for(int i=0;i<byt.Length;i++)
    245            {
    246                //Console.WriteLine(input.Substring(i*2,2));
    247                byt[i] = Convert.ToByte(input.Substring(i*2,2),16);
    248            }

    249
    250            ms = new MemoryStream();
    251            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
    252            cs.Write(byt, 0, byt.Length);
    253            cs.FlushFinalBlock();
    254
    255            cs.Close();
    256
    257            return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
    258        }

    259        /// <summary>
    260        /// Base64解码
    261        /// </summary>
    262        /// <param name="base64Str"></param>
    263        /// <returns></returns>

    264        public static string DecodingFromBase64(string base64Str)
    265        {
    266            Byte[] bytes = Convert.FromBase64String(base64Str);
    267            return System.Text.Encoding.UTF8.GetString(bytes);
    268        }

    269        /// <summary>
    270        /// Base64编码
    271        /// </summary>
    272        /// <param name="str"></param>
    273        /// <returns></returns>

    274        public static string EncodingToBase64(string str)
    275        {
    276            return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
    277        }

    278        /// <summary>
    279        /// 根据指定的编码方式Base64解码
    280        /// </summary>
    281        /// <param name="base64Str"></param>
    282        /// <param name="strEncoding"></param>
    283        /// <returns></returns>

    284        public static string DecodingFromBase64(string base64Str,System.Text.Encoding strEncoding)
    285        {
    286            Byte[] bytes = Convert.FromBase64String(base64Str);
    287            return strEncoding.GetString(bytes);
    288        }

    289        /// <summary>
    290        /// 根据指定的编码方式Base64编码
    291        /// </summary>
    292        /// <param name="str"></param>
    293        /// <param name="strEncoding"></param>
    294        /// <returns></returns>

    295        public static string EncodingToBase64(string str,System.Text.Encoding strEncoding)
    296        {
    297            return Convert.ToBase64String(strEncoding.GetBytes(str));
    298        }

    299    }


    两个常用的方法

     1    /// <summary>
     2        /// 通过字节数组形式的密钥获取字符串形式的密钥
     3        /// </summary>

     4        void GetStringByByteArray()
     5        {
     6            byte[] Key = new byte[8]{56,50,55,56,56,55,49,49}
     7            Response.Write(System.Text.Encoding.Default.GetString(Key));
     8            Response.End();
     9        }

    10
    11        /// <summary>
    12        /// 通过字符串形式的密钥获取字节数组形式的密钥
    13        /// </summary>

    14        void GetByteArrayByString()
    15        {
    16            string key = "82788711";
    17            Response.Write(System.Text.Encoding.Default.GetBytes(key));
    18            Response.End();
    19            
    20        }



    有这里没包括的,欢迎回复,大家一起总结一下~~

  • 相关阅读:
    职业发展拷问——非科班出身如何才能成为一名合格程序员
    记一个神奇的Bug
    Python多维数组切片
    如何查看数组指针指向数组的所有元素
    RoboMongo命令(版本:Robo 3T 1.1.1)
    Git命令(Git版本:Linux 2.14.3)
    逐点收敛与一致收敛
    廖雪峰Python教程疑问
    The Non-Inverting Amplifier Output Resistance by Adrian S. Nastase [转载]
    2.4G无线射频通信模块nRF24L01+开发笔记(基于MSP430RF6989与STM32f0308)(1.(2)有错误,详见更正)
  • 原文地址:https://www.cnblogs.com/88223100/p/1260778.html
Copyright © 2011-2022 走看看