private void btnDe_Click(object sender, EventArgs e) { byte[] result = null; try { StringFormatTypes stringType = (StringFormatTypes)Enum.Parse(typeof(StringFormatTypes), this.cmbStringFormatType.Text); CipherMode cipherMode = (CipherMode)Enum.Parse(typeof(CipherMode), this.cmbCipherMode.Text); PaddingMode paddingMode = (PaddingMode)Enum.Parse(typeof(PaddingMode), this.cmbPaddingMode.Text); if (this.cmbAlgorithm.Text == "DES") { result = this.txtCipherText.Text.DESDecrypt(key1, key2, stringType, cipherMode, paddingMode); } else if (this.cmbAlgorithm.Text == "TripleDES/DESede") { result = this.txtCipherText.Text.DESedeDecrypt(key1, key2, stringType, cipherMode, paddingMode); } if (result != null) { this.txtSource.Text = result.ToString(StringFormatTypes.None); } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// /// </summary> /// <param name="bytes"></param> /// <param name="destFormatType">目标字符串格式类型</param> /// <param name="charset"></param> /// <returns></returns> public static string ToString(this byte[] bytes, StringFormatTypes destFormatType = StringFormatTypes.None, string charset = "UTF-8") { if (destFormatType == StringFormatTypes.BASE64) { return(Convert.ToBase64String(bytes)); } else if (destFormatType == StringFormatTypes.HEX) { return(string.Join(string.Empty, bytes.Select(x => x.ToString("X2")))); //return BitConverter.ToString(bytes).Replace("-", ""); } else { return(Encoding.GetEncoding(charset).GetString(bytes)); } }
/// <summary> /// 源字符串转化为字节数组 /// </summary> /// <param name="source">源字符串</param> /// <param name="sourceFormatType">源字符串的字符串格式类型</param> /// <param name="charset">字符集</param> /// <returns>字节数组</returns> public static byte[] ToByteArray(this string source, StringFormatTypes sourceFormatType = StringFormatTypes.None, string charset = "UTF-8") { if (sourceFormatType == StringFormatTypes.BASE64) { return(Convert.FromBase64String(source)); } else if (sourceFormatType == StringFormatTypes.HEX) { int len = source.Length; byte[] bytes = new byte[len / 2]; for (int i = 0; i < len; i += 2) { bytes[i / 2] = Convert.ToByte(source.Substring(i, 2), 16); } return(bytes); } else { return(Encoding.GetEncoding(charset).GetBytes(source)); } }
/// <summary> /// 解密 /// </summary> /// <param name="source"></param> /// <param name="key"></param> /// <param name="iv"></param> /// <param name="sourceFormatType"></param> /// <param name="cipherMode"></param> /// <param name="paddingMode"></param> /// <returns></returns> public static byte[] DESDecrypt(this string source, string key, string iv, StringFormatTypes sourceFormatType = StringFormatTypes.BASE64, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7) { var provider = new DESCryptoServiceProvider(); provider.Mode = cipherMode; provider.Padding = paddingMode; using (MemoryStream memoryStream = new MemoryStream()) { byte[] rgbKey = key.ToByteArray(StringFormatTypes.None); byte[] rgbIV = iv.ToByteArray(StringFormatTypes.None); using (CryptoStream cryptoStream = new CryptoStream(memoryStream, provider.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write)) { byte[] buffer = source.ToByteArray(sourceFormatType); cryptoStream.Write(buffer, 0, buffer.Length); cryptoStream.FlushFinalBlock(); } return(memoryStream.ToArray()); } }
/// <summary> /// 源字符串转化为指定字符串格式类型的字符串 /// </summary> /// <param name="source">源字符串</param> /// <param name="sourceFormatType">源字符串格式类型</param> /// <param name="destFormatType">目标字符串格式类型</param> /// <param name="charset">字符集类型</param> /// <returns>指定字符串格式类型的字符串</returns> public static string ToString(this string source, StringFormatTypes sourceFormatType = StringFormatTypes.None, StringFormatTypes destFormatType = StringFormatTypes.None, string charset = "UTF-8") { return(source.ToByteArray(sourceFormatType, charset).ToString(destFormatType, charset)); }
/// <summary> /// 解密 /// </summary> /// <param name="source"></param> /// <param name="key"></param> /// <param name="sourceFormatType"></param> /// <param name="cipherMode"></param> /// <param name="paddingMode"></param> /// <returns></returns> public static byte[] DESDecrypt(this string source, string key, StringFormatTypes sourceFormatType = StringFormatTypes.BASE64, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7) { return(DESDecrypt(source, key, key, sourceFormatType, cipherMode, paddingMode)); }