private byte[] HexStringToByteArray(string s) { byte[] bData = new byte[s.Length / 2]; int i = 0; int j = 0; while (i <= s.Length - 1) { bData[j] = Convert.ToByte(s.Substring(i, 2), 16); i += 2; j += 1; } return bData; } private string ByteArrayToHexString(byte[] bData) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < bData.Length; i++) { sb.AppendFormat("{0:X2}", bData[i]); } return sb.ToString(); } private string TripleDESEncryptSingleLength(string key, string data) { string result = ""; result = DESEncrypt(key, data); //result = DESDecrypt(key, result); //result = DESEncrypt(key, result); return result; } private string DESEncrypt(string sKey, string sData) { byte[] bKey = new byte[8]; byte[] bData = new byte[8]; byte[] bOutput = new byte[8]; string sResult = ""; bKey = HexStringToByteArray(sKey); bData = HexStringToByteArray(sData); bOutput = byteDESEncrypt(bKey, bData); sResult = ByteArrayToHexString(bOutput); return sResult; } private string DESDecrypt(string sKey, string sData) { byte[] bKey = new byte[8]; byte[] bData = new byte[8]; byte[] bOutput = new byte[8]; string sResult = ""; bKey = HexStringToByteArray(sKey); bData = HexStringToByteArray(sData); bOutput = byteDESDecrypt(bKey, bData); sResult = ByteArrayToHexString(bOutput); return sResult; } private byte[] byteDESEncrypt(byte[] bKey, byte[] bData) { MemoryStream outStream; DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider(); CryptoStream csMyCryptoStream; byte[] bNullVector = { 0, 0, 0, 0, 0, 0, 0, 0 }; byte[] bResult = new byte[8]; if (DESCryptoServiceProvider.IsWeakKey(bKey)) { for (int i = 0; i < 8; i++) bResult[i] = bData[i]; return bResult; } outStream = new MemoryStream(bResult); desProvider.Mode = CipherMode.ECB; desProvider.Key = bKey; desProvider.IV = bNullVector; desProvider.Padding = PaddingMode.None; csMyCryptoStream = new CryptoStream(outStream, desProvider.CreateEncryptor(bKey, bNullVector), CryptoStreamMode.Write); csMyCryptoStream.Write(bData, 0, 8); csMyCryptoStream.Close(); return bResult; } private byte[] byteDESDecrypt(byte[] bKey, byte[] bData) { MemoryStream outStream; DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider(); CryptoStream csMyCryptoStream; byte[] bNullVector = { 0, 0, 0, 0, 0, 0, 0, 0 }; byte[] bResult = new byte[8]; if (DESCryptoServiceProvider.IsWeakKey(bKey)) { for (int i = 0; i < 8; i++) bResult[i] = bData[i]; return bResult; } outStream = new MemoryStream(bResult); desProvider.Mode = CipherMode.ECB; desProvider.Key = bKey; desProvider.IV = bNullVector; desProvider.Padding = PaddingMode.None; csMyCryptoStream = new CryptoStream(outStream, desProvider.CreateDecryptor(bKey, bNullVector), CryptoStreamMode.Write); csMyCryptoStream.Write(bData, 0, 8); csMyCryptoStream.Close(); return bResult; } private void buttonExecute_Click(object sender, EventArgs e) { string text = DESEncrypt("0123456789ABCDEF", this.textBoxInput.Text.Replace(" ", "")); this.textBoxResult.Text = text.Substring(0, 4) + " " + text.Substring(4, 4) + " " + text.Substring(8, 4) + " " + text.Substring(12, 4); }