/// <summary>将某种格式的密文转为加密后的二进制数据</summary> /// <param name="ciphertext">密文</param> /// <param name="format">密文格式</param> /// <returns>加密后的二进制数据</returns> public static byte[] FromCiphertext(string ciphertext, CiphertextFormat format) { byte[] result = null; if (format == CiphertextFormat.Base64String) { result = Convert.FromBase64String(ciphertext); } else if (format == CiphertextFormat.HexString) { string[] data = ciphertext.Split('-'); result = new byte[data.Length]; Int32Converter converter = new Int32Converter(); for (int i = 0; i < data.Length; i++) { result[i] = Convert.ToByte(converter.ConvertFromInvariantString(string.Format("0x{0}", data[i])).ToString()); } } else if (format == CiphertextFormat.HexStringWhitoutHyphen) { result = new byte[ciphertext.Length / 2]; Int32Converter converter = new Int32Converter(); for (int i = 0; i < ciphertext.Length; i = i + 2) { result[i / 2] = Convert.ToByte(converter.ConvertFromInvariantString(string.Format("0x{0}", ciphertext.Substring(i, 2)).ToString())); } } return(result); }
/// <summary> /// DES descrypt. /// </summary> /// <param name="i_key">Keys</param> /// <param name="i_IV">initial vector</param> /// <param name="i_data">Data</param> /// <returns></returns> public static string Decrypt(string i_key, string i_IV, string i_data) { string[] m_datas = i_data.Split('-'); byte[] m_values = new byte[m_datas.Length]; Int32Converter m_i32Converter = new Int32Converter(); for (int i = 0; i < m_datas.Length; i++) { m_values[i] = Convert.ToByte(m_i32Converter.ConvertFromInvariantString("0x" + m_datas[i]).ToString()); } byte[] m_keys = Encoding.ASCII.GetBytes(i_key); byte[] m_IVs = Encoding.ASCII.GetBytes(i_IV); byte[] m_data = Encoding.ASCII.GetBytes(i_data); DESCryptoServiceProvider m_DES = new DESCryptoServiceProvider(); ICryptoTransform m_decrypt = m_DES.CreateDecryptor(m_keys, m_IVs); byte[] m_result = m_decrypt.TransformFinalBlock(m_values, 0, m_values.Length); m_decrypt.Dispose(); m_DES.Clear(); return(Encoding.ASCII.GetString(m_result)); }