1

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フォームのどこでそれを定義し、グローバル変数を設定して、すべてのフォームで使用できるようにすることができますか?

4

1 に答える 1

5

public static クラスを使用します。これを行うには、プロジェクトを右クリックし、[追加] → [クラス] を選択します。ダイアログで「Utils.cs」などの名前を付けて確認します。コードを次のように変更します。

public static class Utils
{
    public static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)
    {
        //...
    }
}

プロジェクトのどこでも、どのような形式でも、次のものを使用できます。

Utils.DecryptFile(...);

複数のプロジェクトがある場合は、少し複雑になりますが、それでもかなり単純です。クラスライブラリタイプの新しいプロジェクト内にそのクラスを配置するだけで、ユーティリティが必要な場所にそのプロジェクトへの参照を追加できます。

余談ですが、変数を公開するには、上記のクラスに次のようなものを追加するだけです: (静的ゲッターとして知られています)

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;
于 2013-09-15T11:03:56.653 に答える