1

使用できなくなったアカウントで最初に作成された接続を復号化する必要があります。

それを行うために、私は簡単なアプリを作りました:

private void btnEncrypt_Click(object sender, EventArgs e)
    {            
        DataProtection.DataProtector dp = new DataProtection.DataProtector(DataProtection.DataProtector.Store.USE_MACHINE_STORE);
        try
        {
            byte[] dbToEncrypt = Encoding.ASCII.GetBytes(txtText.Text);
            string resultEncrypted = Convert.ToBase64String(dp.Encrypt(dbToEncrypt, null));
            txtEncrypt.Text = resultEncrypted;                
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message);
        }
    }
private void btnDecrypt_Click(object sender, EventArgs e)
    {            
        DataProtection.DataProtector dp = new DataProtection.DataProtector(DataProtection.DataProtector.Store.USE_MACHINE_STORE);
        try
        {
            byte[] dbToDecrypt = Convert.FromBase64String(txtEncrypt.Text);
            string resultDecrypted = Encoding.ASCII.GetString(dp.Decrypt(dbToDecrypt, null));
            txtDecrypt.Text = resultDecrypted;
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message);
        }
    }

今、自分のコンピューターでテストを行い、暗号化された結果を別のコンピューターで復号化しようとすると、次のようになることに気付きました。

復号化の例外。復号化に失敗しました。特定の状態で使用するためのキーが無効です。

その後、いろいろ調べた結果、以下のことがわかりました。

あるサーバーから別のサーバーにキーをエクスポートして、両方が同じように設定されていますか? そうでない場合は、不一致のキーを使用しているため、暗号化/復号化エラーが発生します。

ここでキーを見つけることができます:

検証キーの値と復号化キーの値を取得する方法は?

復号化キーは、「D:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys」にあります。

私の質問は次のとおりです。データを解読したいコンピューターからその場所にキーをエクスポートすると、それは機能しますか? エクスポートとは、キーファイルをコピーするか、別の操作を行うことを意味しますか?

4

1 に答える 1

1

私の知る限り、これは不可能です - いずれにしても望ましくありません。DPAPI は定期的に新しいキーを作成するため、マシン間でキーをコピーできたとしても、一定期間が経過すると古くなります。

複数のコンピュータでデータを復号化する場合は、RSA などの別の方法を使用してください。

于 2012-06-13T19:24:48.100 に答える