C#的新手 - 从Powershell和Java中的真正管理员转移。我正在使用MS函数来解密文件:
static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
//A 64 bit key and IV is required for this provider.
//Set secret key For DES algorithm.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
//Set initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
//Create a file stream to read the encrypted file back.
FileStream fsread = new FileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
//Create a DES decryptor from the DES instance.
ICryptoTransform desdecrypt = DES.CreateDecryptor();
//Create crypto stream set to read and do a
//DES decryption transform on incoming bytes.
CryptoStream cryptostreamDecr = new CryptoStream(fsread,
desdecrypt,
CryptoStreamMode.Read);
//Print the contents of the decrypted file.
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}
目前,我通过各种形式通过各种按钮调用它:
string decryptionKey = File.ReadAllText(@"C:\ThickClient\secretKey.skey");
DecryptFile("C:\\ThickClient\\Encrypted.enc", "C:\\ThickClient\\tempPWDump.enc", decryptionKey);
string decryptedPW = File.ReadAllText(@"C:\ThickClient\tempPWDump.enc");
File.Delete(@"C:\ThickClient\tempPWDump.enc");
我必须在每个表单中定义static void DecryptFile {code}
,并将其调用到每个表单中的新变量以使用它。看起来很疯狂,我可以在Windows窗体中定义它并设置一个全局变量,以便每个表单都可以使用它吗?
答案 0 :(得分:5)
使用公共静态类。为此,请右键单击该项目,然后选择“添加”→“类”。在对话框中输入名称,例如" Utils.cs"并确认。将代码更改为以下内容:
public static class Utils
{
public static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)
{
//...
}
}
现在项目中的任何地方,无论以任何形式,您都可以:
Utils.DecryptFile(...);
如果您有多个项目,它会变得有点复杂但仍然非常简单。只需将该类放入类库类型的新项目中,并在需要实用程序的任何位置添加对该项目的引用。
另一方面,要公开变量,只需在上面的类中添加这样的内容:(称为静态getter)
private static string decryptedPW = "";
public static string DecryptedPW
{
get
{
//need to initialize?
if (decryptedPW.Length == 0)
{
string filePath = @"C:\ThickClient\tempPWDump.enc";
decryptedPW = File.ReadAllText(filePath);
File.Delete(filePath);
}
return decryptedPW;
}
}
然后从项目的任何地方访问它:
string decryptedPW = Utils.DecryptedPW;