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; } } }