|
@@ -84,6 +84,33 @@ namespace Masuit.Tools.Security
|
|
|
return ret.ToString();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 加密字符串
|
|
|
+ /// 加密密钥必须为8位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="strText">被加密的字符串</param>
|
|
|
+ /// <param name="desKey"></param>
|
|
|
+ /// <param name="desIV"></param>
|
|
|
+ /// <returns>加密后的数据</returns>
|
|
|
+ public static string DesEncrypt(this string strText, byte[] desKey, byte[] desIV)
|
|
|
+ {
|
|
|
+ StringBuilder ret = new StringBuilder();
|
|
|
+ using var des = new DESCryptoServiceProvider();
|
|
|
+ byte[] inputByteArray = Encoding.Default.GetBytes(strText);
|
|
|
+ des.Key = desKey;
|
|
|
+ des.IV = desIV;
|
|
|
+ MemoryStream ms = new MemoryStream();
|
|
|
+ using var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
|
|
|
+ cs.Write(inputByteArray, 0, inputByteArray.Length);
|
|
|
+ cs.FlushFinalBlock();
|
|
|
+ foreach (byte b in ms.ToArray())
|
|
|
+ {
|
|
|
+ ret.AppendFormat($"{b:X2}");
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret.ToString();
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// DES加密文件
|
|
|
/// </summary>
|
|
@@ -119,6 +146,30 @@ namespace Masuit.Tools.Security
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// DES加密文件
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="fin">文件输入流</param>
|
|
|
+ /// <param name="outFilePath">文件输出路径</param>
|
|
|
+ /// <param name="desKey"></param>
|
|
|
+ /// <param name="desIV"></param>
|
|
|
+ public static void DesEncrypt(this FileStream fin, string outFilePath, byte[] desKey, byte[] desIV)
|
|
|
+ {
|
|
|
+ using var fout = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
|
|
|
+ fout.SetLength(0);
|
|
|
+ byte[] bin = new byte[100];
|
|
|
+ long rdlen = 0;
|
|
|
+ long totlen = fin.Length;
|
|
|
+ DES des = new DESCryptoServiceProvider();
|
|
|
+ var encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
|
|
|
+ while (rdlen < totlen)
|
|
|
+ {
|
|
|
+ var len = fin.Read(bin, 0, 100);
|
|
|
+ encStream.Write(bin, 0, len);
|
|
|
+ rdlen += len;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// DES解密文件
|
|
|
/// </summary>
|
|
@@ -154,6 +205,30 @@ namespace Masuit.Tools.Security
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// DES解密文件
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="fin">输入文件流</param>
|
|
|
+ /// <param name="outFilePath">文件输出路径</param>
|
|
|
+ /// <param name="desKey"></param>
|
|
|
+ /// <param name="desIV"></param>
|
|
|
+ public static void DesDecrypt(this FileStream fin, string outFilePath, byte[] desKey, byte[] desIV)
|
|
|
+ {
|
|
|
+ using var fout = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
|
|
|
+ fout.SetLength(0);
|
|
|
+ byte[] bin = new byte[100];
|
|
|
+ long rdlen = 0;
|
|
|
+ long totlen = fin.Length;
|
|
|
+ using DES des = new DESCryptoServiceProvider();
|
|
|
+ var encStream = new CryptoStream(fout, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write);
|
|
|
+ while (rdlen < totlen)
|
|
|
+ {
|
|
|
+ var len = fin.Read(bin, 0, 100);
|
|
|
+ encStream.Write(bin, 0, len);
|
|
|
+ rdlen += len;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// DES解密算法
|
|
|
/// 密钥为8位
|
|
@@ -185,6 +260,33 @@ namespace Masuit.Tools.Security
|
|
|
return Encoding.Default.GetString(ms.ToArray());
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// DES解密算法
|
|
|
+ /// 密钥为8位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="pToDecrypt">需要解密的字符串</param>
|
|
|
+ /// <param name="desKey"></param>
|
|
|
+ /// <param name="desIV"></param>
|
|
|
+ /// <returns>解密后的数据</returns>
|
|
|
+ public static string DesDecrypt(this string pToDecrypt, byte[] desKey, byte[] desIV)
|
|
|
+ {
|
|
|
+ var ms = new MemoryStream();
|
|
|
+ using var des = new DESCryptoServiceProvider();
|
|
|
+ var inputByteArray = new byte[pToDecrypt.Length / 2];
|
|
|
+ for (int x = 0; x < pToDecrypt.Length / 2; x++)
|
|
|
+ {
|
|
|
+ int i = Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16);
|
|
|
+ inputByteArray[x] = (byte)i;
|
|
|
+ }
|
|
|
+
|
|
|
+ des.Key = desKey;
|
|
|
+ des.IV = desIV;
|
|
|
+ using var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
|
|
|
+ cs.Write(inputByteArray, 0, inputByteArray.Length);
|
|
|
+ cs.FlushFinalBlock();
|
|
|
+ return Encoding.Default.GetString(ms.ToArray());
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 对称加密算法AES RijndaelManaged加密解密
|