所有Win Forms中均可使用的功能

时间:2013-09-15 11:00:19

标签: c#

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窗体中定义它并设置一个全局变量,以便每个表单都可以使用它吗?

1 个答案:

答案 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;