zoukankan      html  css  js  c++  java
  • 加解密合集

    using System;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;
    using System.Security.Cryptography;
    using System.Web;
    using System.Text.RegularExpressions;
    
    namespace Crypto
    {
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button7_Click(object sender, EventArgs e)//md5选择文件
            {
                OpenFileDialog openFile1 = new OpenFileDialog();
                openFile1.RestoreDirectory = true;
                if (openFile1.ShowDialog() == DialogResult.OK)
                {
                    textBox3.Text = openFile1.FileName.ToString();
                }
            }
    
            private void button10_Click(object sender, EventArgs e)//sha1选择文件
            {
                OpenFileDialog openFile2 = new OpenFileDialog();
                openFile2.RestoreDirectory = true;
                if (openFile2.ShowDialog() == DialogResult.OK)
                {
                    textBox5.Text = openFile2.FileName.ToString();
                }
            }
    
            private void radioButton9_CheckedChanged(object sender, EventArgs e)//新的RSA选择加密,隐藏控件
            {
                if (radioButton9.Checked == true)
                {
                    label24.Show();
                    richTextBox17.Show();
                    button18.Show();
    
                    label21.Hide();
                    richTextBox16.Hide();
                    button17.Hide();
                }
                else
                {
                    label24.Hide();
                    richTextBox17.Hide();
                    button18.Hide();
    
                    label21.Show();
                    richTextBox16.Show();
                    button17.Show();
                }
            }
    
            private void button1_Click(object sender, EventArgs e)//AES加密
            {
                int AES_Checked = 0;
                if (radioButton1.Checked == true) AES_Checked = 1;
                else if (radioButton2.Checked == true) AES_Checked = 2;
                else if (radioButton3.Checked == true) AES_Checked = 3;
    
                string AES_Key = textBox1.Text;
                string AES_IV = textBox8.Text;
                int[] AES_Length = { 16, 24, 32 };
                if (AES_Key.Length != AES_Length[AES_Checked - 1]) { MessageBox.Show("密钥应为" + AES_Length[AES_Checked - 1] + ""); return; }//密钥长度
                if (AES_IV.Length != 16) { MessageBox.Show("向量应为16位"); return; }
                CipherMode AES_Mode = CipherMode.ECB;
                if (radioButton4.Checked == true) AES_Mode = CipherMode.ECB;
                else if (radioButton5.Checked == true) AES_Mode = CipherMode.CBC;
                else if (radioButton7.Checked == true) AES_Mode = CipherMode.CFB;
    
                int pad = comboBox3.SelectedIndex;
    
                string AES_Message = richTextBox2.Text;
                if (AES_Message == "" || AES_Message == null) return;
                string AES_Ciphertext = MyAES.Encrypt(AES_Message, AES_Key, AES_IV, AES_Mode, pad, AES_Length[AES_Checked - 1] * 8);
                richTextBox1.Text = AES_Ciphertext;
    
            }
    
            private void button2_Click(object sender, EventArgs e)//AES解密
            {
    
                int AES_Checked = 0;
                if (radioButton1.Checked == true) AES_Checked = 1;
                else if (radioButton2.Checked == true) AES_Checked = 2;
                else if (radioButton3.Checked == true) AES_Checked = 3;
    
                string AES_Key = textBox1.Text;
                string AES_IV = textBox8.Text;
                int[] AES_Length = { 16, 24, 32 };
                if (AES_Key.Length != AES_Length[AES_Checked - 1]) { MessageBox.Show("密钥应为" + AES_Length[AES_Checked - 1] + ""); return; }//密钥长度
                if (AES_IV.Length != 16) { MessageBox.Show("向量应为16位"); return; }
                CipherMode AES_Mode = CipherMode.ECB;
                if (radioButton4.Checked == true) AES_Mode = CipherMode.ECB;
                else if (radioButton5.Checked == true) AES_Mode = CipherMode.CBC;
                else if (radioButton7.Checked == true) AES_Mode = CipherMode.CFB;
    
                int pad = comboBox3.SelectedIndex;
    
                string AES_Ciphertext = richTextBox1.Text;
                if (AES_Ciphertext == "" || AES_Ciphertext == null) return;
                string AES_Message = MyAES.Decrypt(AES_Ciphertext, AES_Key, AES_IV, AES_Mode, pad, AES_Length[AES_Checked - 1] * 8);
                richTextBox2.Text = AES_Message;
            }
    
            private void button3_Click(object sender, EventArgs e)//DES加密
            {
                int pad = comboBox2.SelectedIndex;
                CipherMode DES_Mode = CipherMode.ECB;
                if (radioButton15.Checked == true) DES_Mode = CipherMode.ECB;
                else if (radioButton16.Checked == true) DES_Mode = CipherMode.CBC;
                else if (radioButton17.Checked == true) DES_Mode = CipherMode.CFB;
    
                string DES_Key = textBox2.Text;
                string DES_IV = textBox9.Text;
                if (DES_IV.Length != 8) { MessageBox.Show("向量应为8位"); return; }
                if (DES_Key.Length != 8) { MessageBox.Show("密钥位数应为8位"); return; }//密钥长度
                string DES_Message = richTextBox3.Text;
                if (DES_Message == "" || DES_Message == null) return;
    
                richTextBox4.Text = MyDES.Encrypt(DES_Message, DES_Key, DES_IV, DES_Mode, pad);
            }
    
            private void button4_Click(object sender, EventArgs e)//DES解密
            {
                int pad = comboBox2.SelectedIndex;
                CipherMode DES_Mode = CipherMode.ECB;
                if (radioButton15.Checked == true) DES_Mode = CipherMode.ECB;
                else if (radioButton16.Checked == true) DES_Mode = CipherMode.CBC;
                else if (radioButton17.Checked == true) DES_Mode = CipherMode.CFB;
                string DES_Key = textBox2.Text;
                string DES_IV = textBox9.Text;
    
                if (DES_Key.Length != 8) { MessageBox.Show("密钥位数与算法不匹配"); return; }//密钥长度
    
                string DES_Ciphertext = richTextBox4.Text;
                if (DES_Ciphertext == "" || DES_Ciphertext == null) return;
                string DES_Message = MyDES.Decrypt(DES_Ciphertext, DES_Key, DES_IV, DES_Mode, pad);
                richTextBox3.Text = DES_Message;
            }
    
            private void button15_Click(object sender, EventArgs e)//Base64加密
            {
                Encoding encoding = Encoding.UTF8;
                int t = comboBox1.SelectedIndex;
                switch (t)
                {
                    case 0: encoding = Encoding.UTF8; break;
                    case 1: encoding = Encoding.GetEncoding("GB2312"); break;
                    case 2: encoding = Encoding.GetEncoding("GBK"); break;
                    case 3: encoding = Encoding.ASCII; break;
                    case 4: encoding = Encoding.Unicode; break;
                    case 5: encoding = Encoding.UTF7; break;
                    case 6: encoding = Encoding.UTF32; break;
                    case 7: encoding = Encoding.BigEndianUnicode; break;
                    default: encoding = Encoding.UTF8; break;
                }
                string decode_Num = textBox14.Text;
                int num = 1;
                int.TryParse(decode_Num, out num);
                if (num < 1)
                {
                    num = 1;
                }
                string Base64_Message = richTextBox13.Text;
                for (int i = 0; i < num; i++)
                {
                    Base64_Message = MyBase64.EncodeBase64(Base64_Message, encoding);
                }
    
                richTextBox14.Text = Base64_Message;
    
            }
    
            private void button14_Click(object sender, EventArgs e)//Base64解密
            {
    
                Encoding encoding = Encoding.UTF8;
    
                int t = comboBox1.SelectedIndex;
                switch (t)
                {
                    case 0: encoding = Encoding.UTF8; break;
                    case 1: encoding = Encoding.GetEncoding("GB2312"); break;
                    case 2: encoding = Encoding.GetEncoding("GBK"); break;
                    case 3: encoding = Encoding.ASCII; break;
                    case 4: encoding = Encoding.Unicode; break;
                    case 5: encoding = Encoding.UTF7; break;
                    case 6: encoding = Encoding.UTF32; break;
                    case 7: encoding = Encoding.BigEndianUnicode; break;
                    default: encoding = Encoding.UTF8; break;
                }
                
                string decode_Num = textBox14.Text;
                int num = 1;
                int.TryParse(decode_Num, out num);
                if (num < 1) {
                    num = 1;
                }
    
                bool url_decode_flag = checkBox1.Checked;
                string Base64_Ciphertext = richTextBox14.Text;
                for (int i = 0; i < num; i++) {
                    if (url_decode_flag) {
                        Base64_Ciphertext = MyUrl.Decode(Base64_Ciphertext, encoding);
                    }
                    Base64_Ciphertext = MyBase64.DecodeBase64(Base64_Ciphertext, encoding);
                }
    
                richTextBox13.Text = Base64_Ciphertext;
            }
    
            private void button8_Click(object sender, EventArgs e)//MD5文字
            {
                string MD5_Message = richTextBox10.Text.Trim();
                if (MD5_Message == "") { textBox4.Text = ""; return; }
                bool MD5_Mode = radioButton11.Checked;
                textBox4.Text = MyMD5.GetMD5Hash(MD5_Message, MD5_Mode);
    
    
            }
    
            private void button9_Click(object sender, EventArgs e)//MD5文件
            {
                string FilePath = textBox3.Text.Trim();
                if (FilePath == null || FilePath == "") return;
                if (File.Exists(FilePath) != true)
                {
                    MessageBox.Show("文件不存在");
                    return;
                }
                bool MD5_Mode = radioButton11.Checked;
                textBox4.Text = MyMD5.GetMD5HashFromFile(FilePath, MD5_Mode);
            }
    
            private void button11_Click(object sender, EventArgs e)//SHA1文字
            {
                string SHA1_Message = richTextBox11.Text.Trim();
                if (SHA1_Message == null || SHA1_Message == "") return;
                string[] sha = MySHA.GetSHAHash(SHA1_Message);
                textBox6.Text = sha[0];
                textBox10.Text = sha[1];
                textBox11.Text = sha[2];
                textBox12.Text = sha[3];
    
            }
    
            private void button12_Click(object sender, EventArgs e)//SHA1文件
            {
                string FilePath = textBox5.Text.Trim();
                if (FilePath == null || FilePath == "") return;
                if (File.Exists(FilePath) != true)
                {
                    MessageBox.Show("文件不存在");
                    return;
                }
                string[] sha = MySHA.GetSHAHashFromFile(FilePath);
                textBox6.Text = sha[0];
                textBox10.Text = sha[1];
                textBox11.Text = sha[2];
                textBox12.Text = sha[3];
            }
    
            private void button16_Click(object sender, EventArgs e)//生成RSA密钥
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                string publickey = rsa.ToXmlString(false);
                string privatekey = rsa.ToXmlString(true);
                richTextBox16.Text = privatekey;
                richTextBox17.Text = publickey;
            }
    
            private void button17_Click(object sender, EventArgs e)//RSA解密
            {
                bool RSA_Mode = radioButton13.Checked;
                string RSA_Ciphertext = richTextBox12.Text;
                richTextBox15.Text = "";
                string privatekey = richTextBox16.Text;
                byte[] ciphertext = new byte[RSA_Ciphertext.Length / 2];
                try
                {
                    for (int x = 0; x < RSA_Ciphertext.Length / 2; x++)
                    {
                        int i = (Convert.ToInt32(RSA_Ciphertext.Substring(x * 2, 2), 16));
                        ciphertext[x] = (byte)i;
                    }
                }
                catch { MessageBox.Show("密文不正确!"); }
                byte[] source;    //原文byte数组
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                try
                {
                    rsa.FromXmlString(privatekey);                          //设置私钥
                    source = rsa.Decrypt(ciphertext, RSA_Mode);                    //解密,得到byte数组
                    richTextBox15.Text = Encoding.Default.GetString(source);    //返回结果
                }
                catch { MessageBox.Show("密钥不正确"); }
    
            }
    
            private void button18_Click(object sender, EventArgs e)//RSA加密
            {
                bool RSA_Mode = radioButton13.Checked;
                string RSA_Message = richTextBox15.Text;
                richTextBox12.Text = "";
                byte[] source = Encoding.Default.GetBytes(RSA_Message);      //明文转换为byte
                byte[] ciphertext;                                           //密文byte数组
                string publickey = richTextBox17.Text;                       //string密钥
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                try
                {
                    rsa.FromXmlString(publickey);                                //导入string密钥  
                    ciphertext = rsa.Encrypt(source, RSA_Mode);                       //加密
                    StringBuilder sb = new StringBuilder();
                    foreach (byte b in ciphertext)
                    {
                        sb.AppendFormat("{0:X2}", b);
                    }
                    richTextBox12.Text = sb.ToString();
    
    
    
                }
                catch { MessageBox.Show("加密失败,请检查密钥"); }
            }
    
            private void button6_Click(object sender, EventArgs e)//URL解码
            {
                Encoding encoding = Encoding.UTF8;
    
                int t = comboBox4.SelectedIndex;
                switch (t)
                {
                    case 0: encoding = Encoding.UTF8; break;
                    case 1: encoding = Encoding.GetEncoding("GB2312"); break;
                    case 2: encoding = Encoding.GetEncoding("GBK"); break;
                    case 3: encoding = Encoding.ASCII; break;
                    case 4: encoding = Encoding.Unicode; break;
                    case 5: encoding = Encoding.UTF7; break;
                    case 6: encoding = Encoding.UTF32; break;
                    case 7: encoding = Encoding.BigEndianUnicode; break;
                    default: encoding = Encoding.UTF8; break;
                }
                richTextBox5.Text = MyUrl.Decode(richTextBox6.Text, encoding);
            }
    
            private void button5_Click(object sender, EventArgs e)//URL部分编码
            {
                Encoding encoding = Encoding.ASCII;
    
                int t = comboBox4.SelectedIndex;
                switch (t)
                {
                    case 0: encoding = Encoding.UTF8; break;
                    case 1: encoding = Encoding.GetEncoding("GB2312"); break;
                    case 2: encoding = Encoding.GetEncoding("GBK"); break;
                    case 3: encoding = Encoding.ASCII; break;
                    case 4: encoding = Encoding.Unicode; break;
                    case 5: encoding = Encoding.UTF7; break;
                    case 6: encoding = Encoding.UTF32; break;
                    case 7: encoding = Encoding.BigEndianUnicode; break;
                    default: encoding = Encoding.UTF8; break;
                }
                richTextBox6.Text = MyUrl.Encode(richTextBox5.Text, encoding);
            }
    
            private void button20_Click(object sender, EventArgs e)//URL二次解码
            {
                Encoding encoding = Encoding.ASCII;
    
                int t = comboBox4.SelectedIndex;
                switch (t)
                {
                    case 0: encoding = Encoding.UTF8; break;
                    case 1: encoding = Encoding.GetEncoding("GB2312"); break;
                    case 2: encoding = Encoding.GetEncoding("GBK"); break;
                    case 3: encoding = Encoding.ASCII; break;
                    case 4: encoding = Encoding.Unicode; break;
                    case 5: encoding = Encoding.UTF7; break;
                    case 6: encoding = Encoding.UTF32; break;
                    case 7: encoding = Encoding.BigEndianUnicode; break;
                    default: encoding = Encoding.UTF8; break;
                }
                richTextBox5.Text = MyUrl.Decode(MyUrl.Decode(richTextBox6.Text, encoding), encoding);
            }
    
            private void button21_Click(object sender, EventArgs e)//URL二次部分编码
            {
                Encoding encoding = Encoding.ASCII;
                int t = comboBox4.SelectedIndex;
                switch (t)
                {
                    case 0 : encoding = Encoding.UTF8; break;
                    case 1: encoding = Encoding.GetEncoding("GB2312"); break;
                    case 2: encoding = Encoding.GetEncoding("GBK"); break;
                    case 3: encoding = Encoding.ASCII; break;
                    case 4: encoding = Encoding.Unicode; break;
                    case 5: encoding = Encoding.UTF7; break;
                    case 6: encoding = Encoding.UTF32; break;
                    case 7: encoding = Encoding.BigEndianUnicode; break;
                    default: encoding = Encoding.UTF8; break;
        }
                richTextBox6.Text = MyUrl.Encode(MyUrl.Encode(richTextBox5.Text, encoding),encoding);
            }
    
            private void button19_Click(object sender, EventArgs e)//html编码
            {
                bool flag = true;
                if (radioButton6.Checked) {//10进制
                    flag = true;
                }else//16进制
                {
                    flag = false;
                }
                richTextBox7.Text = MyHtml.Encode(richTextBox8.Text,flag);
            }
    
            private void button13_Click(object sender, EventArgs e)//html解码
            {
               
                richTextBox8.Text = MyHtml.Decode(richTextBox7.Text);
            }
    
            private void button28_Click(object sender, EventArgs e)//转16进制
            {
                Encoding encoding = Encoding.ASCII;
                int t = comboBox5.SelectedIndex;
                switch (t)
                {
                    case 0: encoding = Encoding.ASCII; break;
                    case 1: encoding = Encoding.Unicode; break;
                    case 2: encoding = Encoding.UTF8; break;
                    case 3: encoding = Encoding.GetEncoding("gb2312"); break;
                    default: encoding = Encoding.ASCII; break;
                }
    
                String originalText = richTextBox18.Text;
                richTextBox9.Text = "";
                byte[] originalByte = encoding.GetBytes(originalText);
                String outString = "";
                foreach (byte tmpByte in originalByte) {
                    outString += String.Format(" {0:X2}", Convert.ToInt32(tmpByte));
                }
    
                richTextBox9.Text = outString;
    
    
            }
    
            private void button29_Click(object sender, EventArgs e)//转字符串
            {
                Encoding encoding = Encoding.ASCII;
                int t = comboBox5.SelectedIndex;
                switch (t)
                {
                    case 0: encoding = Encoding.ASCII; break;
                    case 1: encoding = Encoding.Unicode; break;
                    case 2: encoding = Encoding.UTF8; break;
                    case 3: encoding = Encoding.GetEncoding("gb2312"); break;
                    default: encoding = Encoding.ASCII; break;
                }
    
                String originalText = richTextBox18.Text.Replace(" ","");
                richTextBox9.Text = "";
                try
                {
                    byte[] bs = new byte[originalText.Length / 2 + originalText.Length%2];
                    for (int i = 0; i < originalText.Length; i = i + 2)
                    {
                        if (i + 2 > originalText.Length) {
                            bs[i / 2] = Convert.ToByte(originalText.Substring(i, 1), 16);
                        }
                        else
                        {
                            bs[i / 2] = Convert.ToByte(originalText.Substring(i, 2), 16);
                        }
                    }
                    richTextBox9.Text = encoding.GetString(bs);
                }
                catch {
                    richTextBox9.Text = "转换失败,请输入16进制的字符";
                }
    
    
    
            }
    
            private void richTextBox18_TextChanged(object sender, EventArgs e)//16进制显示原文长度
            {
                label42.Text = richTextBox18.Text.Length.ToString();
            }
    
            private void textBox7_Leave(object sender, EventArgs e)
            {
                String originalRGB = textBox7.Text;
                int R = 128;
                int G = 128;
                int B = 128;
                MatchCollection m = Regex.Matches(originalRGB, @"(d+)");
                int count = -1;
                foreach (Match item in m)
                {
                    count++;
                    switch (count)
                    {
                        case 0: R = Convert.ToInt32(item.Value) % 256; break;
                        case 1: G = Convert.ToInt32(item.Value) % 256; break;
                        case 2: B = Convert.ToInt32(item.Value) % 256; break;
                        default: break;
                    }
                }
                textBox7.Text = R + "," + G + "," + B;
                String hex = "#";
                hex += String.Format("{0:X2}", R);
                hex += String.Format("{0:X2}", G);
                hex += String.Format("{0:X2}", B);
                textBox13.Text = hex;
                label34.BackColor = System.Drawing.Color.FromArgb(R,G,B); 
            }
    
            private void textBox13_Leave(object sender, EventArgs e)
            {
                String originalHex = textBox13.Text;
                int R = 128;
                int G = 128;
                int B = 128;
                MatchCollection m = Regex.Matches(originalHex, @"([0-9a-fA-F]{2})");
                int count = -1;
                foreach (Match item in m)
                {
                    count++;
                    switch (count)
                    {
                        case 0: R = Convert.ToInt32(item.Value,16)%256; break;
                        case 1: G = Convert.ToInt32(item.Value,16)%256; break;
                        case 2: B = Convert.ToInt32(item.Value,16) % 256; break;
                        default: break;
                    }
                }
                textBox7.Text = R + "," + G + "," + B;
                String hex = "#";
                hex += String.Format("{0:X2}", R);
                hex += String.Format("{0:X2}", G);
                hex += String.Format("{0:X2}", B);
                textBox13.Text = hex;
                label34.BackColor = System.Drawing.Color.FromArgb(R, G, B);
            }
    
            private void tabPage4_Click(object sender, EventArgs e)
            {
    
            }
        }
        static class MyAES
        {
            static PaddingMode[] padding = {
                PaddingMode.PKCS7,
                PaddingMode.ANSIX923,
                PaddingMode.ISO10126,
                PaddingMode.None,
                PaddingMode.Zeros
            };
    
            static public string Encrypt(string Message, string key, string IV, CipherMode Mode, int pad, int length)
            {
                try
                {
                    //RijndaelManaged aes = new RijndaelManaged();
                    Rijndael aes = Rijndael.Create();
                    //aes.BlockSize = 128;
                    //aes.FeedbackSize = 128;
                    aes.KeySize = length;
                    aes.Padding = padding[pad];
                    aes.Mode = Mode;
                    //aes.Key = Encoding.UTF8.GetBytes(key);
                    //aes.IV = Encoding.UTF8.GetBytes(IV);
    
    
                    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
                    byte[] keyIV = Encoding.UTF8.GetBytes(IV);
                    byte[] inputByteArray = Encoding.UTF8.GetBytes(Message);
    
                    MemoryStream memStream = new MemoryStream();
                    CryptoStream crypStream = new CryptoStream(memStream, aes.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
    
                    crypStream.Write(inputByteArray, 0, inputByteArray.Length);
                    crypStream.FlushFinalBlock();
                    aes.Clear();
                    return Convert.ToBase64String(memStream.ToArray());
                }
                catch { MessageBox.Show("加密失败"); return ""; }
            }
            //AES加密
    
            static public string Decrypt(string Ciphertext, string key, string IV, CipherMode Mode, int pad, int length)
            {
                try
                {
                    //RijndaelManaged aes = new RijndaelManaged();
                    Rijndael aes = Rijndael.Create();
                    //aes.BlockSize = 128;
                    //aes.FeedbackSize = 128;
                    //aes.Key = Encoding.UTF8.GetBytes(key);
                    //aes.IV = Encoding.UTF8.GetBytes(IV);
                    aes.KeySize = length;
                    aes.Padding = padding[pad];
                    aes.Mode = Mode;
    
                    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
                    byte[] keyIV = Encoding.UTF8.GetBytes(IV);
                    byte[] outputByteArray = Convert.FromBase64String(Ciphertext);
    
                    MemoryStream memStream = new MemoryStream();
                    CryptoStream crypStream = new CryptoStream(memStream, aes.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);
                    crypStream.Write(outputByteArray, 0, outputByteArray.Length);
                    crypStream.FlushFinalBlock();
                    aes.Clear();
                    return Encoding.UTF8.GetString(memStream.ToArray());
                }
                catch { MessageBox.Show("加密失败"); return ""; }
    
            }
            //AES解密
    
    
    
    
        }
        static class MyDES
        {
            static PaddingMode[] padding = {
                PaddingMode.PKCS7,
                PaddingMode.ANSIX923,
                PaddingMode.ISO10126,
                PaddingMode.None,
                PaddingMode.Zeros
            };
            static public string Encrypt(string Message, string key, string IV, CipherMode Mode, int pad)
            {
                try
                {
    
                    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
                    byte[] keyIV = Encoding.UTF8.GetBytes(IV);
                    byte[] inputByteArray = Encoding.UTF8.GetBytes(Message);
    
                    DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
    
                    // java 默认的是ECB模式,PKCS5padding;c#默认的CBC模式,PKCS7padding 所以这里我们默认使用ECB方式
                    desProvider.Mode = Mode;
                    desProvider.Padding = padding[pad];
                    MemoryStream memStream = new MemoryStream();
                    CryptoStream crypStream = new CryptoStream(memStream, desProvider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
    
                    crypStream.Write(inputByteArray, 0, inputByteArray.Length);
                    crypStream.FlushFinalBlock();
                    return Convert.ToBase64String(memStream.ToArray());
    
                }
                catch
                {
                    MessageBox.Show("加密失败");
                    return "";
                }
    
            }
    
            static public string Decrypt(string Message, string key, string IV, CipherMode Mode, int pad)
            {
                try
                {
                    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
                    byte[] keyIV = Encoding.UTF8.GetBytes(IV);
                    byte[] inputByteArray = Convert.FromBase64String(Message);
    
                    DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
    
                    // java 默认的是ECB模式,PKCS5padding;c#默认的CBC模式,PKCS7padding 所以这里我们默认使用ECB方式
                    desProvider.Mode = Mode;
                    desProvider.Padding = padding[pad];
                    MemoryStream memStream = new MemoryStream();
                    CryptoStream crypStream = new CryptoStream(memStream, desProvider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);
    
                    crypStream.Write(inputByteArray, 0, inputByteArray.Length);
                    crypStream.FlushFinalBlock();
                    return Encoding.Default.GetString(memStream.ToArray());
                }
                catch
                {
                    MessageBox.Show("解密失败");
                    return "";
                }
    
            }
    
        }
        static class MyBase64
        {
            public static Encoding[] encoding = {
                                        Encoding.UTF8,
                                        Encoding.GetEncoding("GB2312"),
                                        Encoding.GetEncoding("GBK"),
                                        Encoding.ASCII,
                                        Encoding.Unicode,
                                        Encoding.UTF7,
                                        Encoding.UTF32,
                                        Encoding.BigEndianUnicode
            };
            static public string EncodeBase64(string Base64_Message, Encoding encoding)
            {
                try
                {
                    return System.Convert.ToBase64String(encoding.GetBytes(Base64_Message));
                }
                catch {
                    return Base64_Message;
                }
            }
    
    
            public static string DecodeBase64(string Base64_Ciphertext, Encoding encoding)
            {
                try
                {
                    return encoding.GetString(System.Convert.FromBase64String(Base64_Ciphertext));
                }
                catch
                {
                    return Base64_Ciphertext;
                }
            }
        }
        static class MySHA
        {
            public static string[] GetSHAHash(string Message)
            {
    
                string[] sha = new string[4];
                try
                {
                    SHA1 sha1 = new SHA1CryptoServiceProvider();
                    SHA256 sha256 = new SHA256CryptoServiceProvider();
                    SHA384 sha384 = new SHA384CryptoServiceProvider();
                    SHA512 sha512 = new SHA512CryptoServiceProvider();
    
                    byte[] sha_in = UTF8Encoding.Default.GetBytes(Message);
    
                    byte[] sha1_out = sha1.ComputeHash(sha_in);
                    byte[] sha256_out = sha256.ComputeHash(sha_in);
                    byte[] sha384_out = sha384.ComputeHash(sha_in);
                    byte[] sha512_out = sha512.ComputeHash(sha_in);
    
                    sha[0] = BitConverter.ToString(sha1_out).Replace("-", "");
                    sha[1] = BitConverter.ToString(sha256_out).Replace("-", "");
                    sha[2] = BitConverter.ToString(sha384_out).Replace("-", "");
                    sha[3] = BitConverter.ToString(sha512_out).Replace("-", "");
                    return sha;
                }
                catch { MessageBox.Show("校验失败"); return sha; }
            }
            public static string[] GetSHAHashFromFile(string fileName)
            {
                string[] sha = new string[4];
                try
                {
    
                    SHA1 sha1 = new SHA1CryptoServiceProvider();
                    SHA256 sha256 = new SHA256CryptoServiceProvider();
                    SHA384 sha384 = new SHA384CryptoServiceProvider();
                    SHA512 sha512 = new SHA512CryptoServiceProvider();
    
                    FileStream file = new FileStream(fileName, FileMode.Open);
                    byte[] sha1_out = sha1.ComputeHash(file);
                    file.Close();
                    file = new FileStream(fileName, FileMode.Open);
                    byte[] sha256_out = sha256.ComputeHash(file);
                    file.Close();
                    file = new FileStream(fileName, FileMode.Open);
                    byte[] sha384_out = sha384.ComputeHash(file);
                    file.Close();
                    file = new FileStream(fileName, FileMode.Open);
                    byte[] sha512_out = sha512.ComputeHash(file);
                    file.Close();
    
                    sha[0] = BitConverter.ToString(sha1_out).Replace("-", "");
                    sha[1] = BitConverter.ToString(sha256_out).Replace("-", "");
                    sha[2] = BitConverter.ToString(sha384_out).Replace("-", "");
                    sha[3] = BitConverter.ToString(sha512_out).Replace("-", "");
                    return sha;
    
                }
                catch
                { MessageBox.Show("校验失败"); return sha; }
    
            }
    
        }
        static class MyMD5
        {
            public static string GetMD5Hash(string Message, bool MD5_Mode)
            {
                try
                {
                    byte[] result = Encoding.Default.GetBytes(Message);
                    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                    byte[] output = md5.ComputeHash(result);
                    if (MD5_Mode == true) return BitConverter.ToString(output).Replace("-", "");//32位MD5值
                    else return BitConverter.ToString(output, 4, 8).Replace("-", "");           //16位MD5值
                }
                catch { MessageBox.Show("校验失败"); return ""; }
    
            }
            public static string GetMD5HashFromFile(string fileName, bool MD5_Mode)
            {
                try
                {
                    FileStream file = new FileStream(fileName, FileMode.Open);
                    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                    byte[] retVal = md5.ComputeHash(file);
                    file.Close();
    
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < retVal.Length; i++)
                    {
                        sb.Append(retVal[i].ToString("x2"));
                    }
                    if (MD5_Mode == true) return sb.ToString().ToUpper();
                    else return sb.ToString().Substring(8, 16).ToUpper();
    
                }
                catch { MessageBox.Show("校验失败"); return ""; }
            }
        }
        static class MyUrl
        {
            public static string Encode(string plain,Encoding encoding)//部分编码
            {
                return HttpUtility.UrlEncode(plain,encoding);
            }
    
            public static string Decode(string text, Encoding encoding)//解码
            {
                return HttpUtility.UrlDecode(text, encoding);
            }
        }
        static class MyHtml {
            public static string Encode(string plain,bool flag) {
                string r = string.Empty;
                if (flag)//10进制
                {
                    for (int i = 0; i < plain.Length; i++)
                    {
                        r += "&#" + Char.ConvertToUtf32(plain, i) + ";";
                    }
                }
                else {
                    //16进制
                    for (int i = 0; i < plain.Length; i++)
                    {
                        r += "&#x" + Char.ConvertToUtf32(plain, i).ToString("x4") + ";";
                    }
                }
                return r;
                
            }
            public static string Decode(string text)
            {
                string t = string.Empty;
                Regex regex1 = new Regex(@"&#x([0-9,a-f,A-F]+);");
                Regex regex2 = new Regex(@"&#([0-9]+);");
    
                while (regex1.IsMatch(text)) {  //解码16进制的html实体编码
                    t = regex1.Match(text).Groups[1].Value;
                    text = regex1.Replace(text,Char.ConvertFromUtf32(Convert.ToInt32(t, 16)),1);  
                }
                while (regex2.IsMatch(text))    //解码10进制的html实体编码
                {
                    t = regex2.Match(text).Groups[1].Value;
                    text = regex2.Replace(text, Char.ConvertFromUtf32(Convert.ToInt32(t, 10)), 1);
                }
                return text;
            }
        }
    }
  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/Jeely/p/11720667.html
Copyright © 2011-2022 走看看