/// <summary> /// 3DES解密24位自定义填充类型 /// </summary> /// <param name="decryptSource">解密的数据源</param> /// <param name="decryptKey">解密的密匙</param> /// <param name="decryptIV">解密的矢量</param> /// <param name="paddingMode">填充类型</param> /// <returns>解密串</returns> public static string TripleDESDecrypt(string decryptSource, string decryptKey, string decryptIV, System.Security.Cryptography.PaddingMode paddingMode) { return(TripleDESDecrypt(decryptSource, decryptKey, decryptIV, paddingMode, 24, "ToBase64")); }
/// <summary> /// 3DES解密 /// </summary> /// <param name="decryptSource">解密的数据源</param> /// <param name="decryptKey">解密的密匙</param> /// <param name="decryptIV">解密的矢量</param> /// <param name="paddingMode">填充模式</param> /// <param name="byteNum">字节</param> /// <param name="outType">解密字节形式ToHex16,ToBase64</param> /// <returns>解密串</returns> public static string TripleDESDecrypt(string decryptSource, string decryptKey, string decryptIV, System.Security.Cryptography.PaddingMode paddingMode, int byteNum, string outType, System.Security.Cryptography.CipherMode mode = System.Security.Cryptography.CipherMode.ECB) { //构造一个对称算法 SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt = new byte[0]; if (string.IsNullOrEmpty(outType)) { return("解密配置不能空"); } if ((decryptKey.Trim().Length) != byteNum) { return("解密字节错误"); } byte[] Key = System.Text.Encoding.Default.GetBytes(decryptKey.Trim()); mCSP.Key = Key; //默认矢量 if (String.IsNullOrEmpty(decryptIV)) { decryptIV = decryptKey.Substring(0, 8); } mCSP.IV = System.Text.Encoding.Default.GetBytes(decryptIV); mCSP.Mode = mode; mCSP.Padding = paddingMode; ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); //输出16进制字符 if (outType == "ToHex16") { byt = ConvertHexToBytes(decryptSource); } //输出ToBase64字符 if (outType == "ToBase64") { byt = Convert.FromBase64String(decryptSource); } ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); return(Encoding.Default.GetString(ms.ToArray()).Replace("\0", "").Trim()); }
/// <summary> /// 3DES加密自定义字节位填充类型 /// </summary> /// <param name="encryptSource">加密的数据源</param> /// <param name="encryptKey">加密的密匙</param> /// <param name="encryptIV">加密的矢量</param> /// <param name="paddingMode">自定义填充类型</param> /// <param name="byteNum">自定义字节数</param> /// <param name="outType">输出字节形式ToHex16,ToBase64</param> /// <returns>加密串</returns> public static string TripleDESEncrypt(string encryptSource, string encryptKey, string encryptIV, System.Security.Cryptography.PaddingMode paddingMode, int byteNum, string outType, System.Security.Cryptography.CipherMode mode = System.Security.Cryptography.CipherMode.ECB) { //构造一个对称算法 SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt; if (string.IsNullOrEmpty(outType)) { return("输出配置不能空"); } if ((encryptKey.Trim().Length) != byteNum) { return("加密字节"); } byte[] Key = System.Text.Encoding.Default.GetBytes(encryptKey); mCSP.Key = Key; //默认矢量 if (String.IsNullOrEmpty(encryptIV)) { encryptIV = encryptKey.Substring(0, 8); } mCSP.IV = System.Text.Encoding.Default.GetBytes(encryptIV); //指定加密的运算模式 mCSP.Mode = mode; //获取或设置加密算法的填充模式 mCSP.Padding = paddingMode; ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); byt = System.Text.Encoding.Default.GetBytes(encryptSource.Trim()); ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); string mToString = string.Empty; //输出16进制字符 if (outType == "ToHex16") { mToString = ToHexString(ms.ToArray()); } //输出ToBase64字符 if (outType == "ToBase64") { mToString = Convert.ToBase64String(ms.ToArray()).ToString().Replace("\0", ""); } return(mToString); }