using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MyM2m ... { public partial class Form1 : Form ...{ public Form1() ...{ InitializeComponent(); } //去除空格 private string formatString(string str) ...{ string fStr = str.Trim(); fStr = fStr.Replace(" ", ""); return fStr; } /**//// <summary> /// 获得除去空格后的数据,然后每两位组合成一个16进制字符串 /// </summary> /// <param name="code"></param> /// <returns></returns> private string[] getCodes(string code) ...{ int count=code.Length/2; string[] codes = new string[count]; string str = this.formatString(code); string getStr = ""; for (int i = 0; i < count; i++) ...{ if (str.Length == 2) ...{ getStr = str; } else ...{ getStr = str.Substring(0, 2); str = str.Substring(2, str.Length - 2); } //getStr = ConvertHex(getStr); codes[i] = getStr; } return codes; } //解密,就是简单的异或运算 private String[] breakKey(string[] codes, string key) ...{ for (int i = 0; i < codes.Length; i++) ...{ try ...{ codes[i] = (Convert.ToByte(codes[i], 16) ^ Convert.ToByte(key, 16)).ToString(); } catch ...{ throw new Exception("数据格式不正确或不为16进制格式"); } } return codes; } //解密按钮 private void button1_Click(object sender, EventArgs e) ...{ this.rtxtRealCode.Text = ""; string str = this.rtxtGetCode.Text; str = this.formatString(str); string key=this.txtKey.Text; try ...{ string[] oldStr = breakKey(getCodes(str), key); for (int i = 0; i < oldStr.Length; i++) ...{ this.rtxtRealCode.Text += ConvertHex(oldStr[i]) + " "; } } catch(Exception ex) ...{ MessageBox.Show(ex.Message); } } //加密按钮 private void button2_Click(object sender, EventArgs e) ...{ this.rtxtGetCode.Text = ""; string str = this.rtxtRealCode.Text; str = this.formatString(str); string key = this.txtKey.Text; string[] oldStr = breakKey(getCodes(str), key); for (int i = 0; i < oldStr.Length; i++) ...{ this.rtxtGetCode.Text += ConvertHex(oldStr[i]) + " "; } } /**//// 返回16进制字符 public static string GetHexChar(string value) ...{ string sReturn = string.Empty; switch (value) ...{ case "10": sReturn = "A"; break; case "11": sReturn = "B"; break; case "12": sReturn = "C"; break; case "13": sReturn = "D"; break; case "14": sReturn = "E"; break; case "15": sReturn = "F"; break; default: sReturn = value; break; } return sReturn; } /**//// <summary> /// 返回16进制 /// </summary> /// <param name="value">value</param> /// <returns></returns> public static string ConvertHex(string value) ...{ string sReturn = string.Empty; try ...{ while (int.Parse(value) > 16) ...{ int v = int.Parse(value); sReturn = GetHexChar((v % 16).ToString()) + sReturn; value = Math.Floor(Convert.ToDouble(v / 16)).ToString(); } sReturn = GetHexChar(value) + sReturn; switch (Convert.ToByte(sReturn,16).ToString()) ...{ case "10": sReturn = "0A"; break; case "11": sReturn = "0B"; break; case "12": sReturn = "0C"; break; case "13": sReturn = "0D"; break; case "14": sReturn = "0E"; break; case "15": sReturn = "0F"; break; } } catch ...{ sReturn = "###Valid Value!###"; } return sReturn; } private void Form1_FormClosed(object sender, FormClosedEventArgs e) ...{ Application.Exit(); } } }