0

疲れた。GnuPG をインストールし、秘密鍵と、GnuPG の別のインスタンスからの 2 つの公開鍵 (自分自身とクライアントの 1 つ) をエクスポートしました。ローカル マシンで「暗号化/復号化」方式を構成しようとしています。

小さなコンソール アプリケーションから暗号化メソッドを実行すると、うまく機能します。ローカル マシンの Web サービスからこの (同じ! - 同じ本体で) メソッドを実行すると、ExitCode = 2 になります。

エラーメッセージが表示されたことには満足していますが、自分の体には不満があります。

「gpg: デフォルトの秘密鍵がありません: 秘密鍵が利用できません gpg: XXXXXXXXXXXXXXXX.xml: 署名+暗号化に失敗しました: 秘密鍵が利用できません」

私は何をすべきか?どうしたの?

よろしく、 カロル・ブラデク

4

2 に答える 2

0

キーリングファイルは、ユーザーごとに作成されます。コンソールアプリケーションを実行すると、ディレクトリ内のPGPキーリングファイルが検索されますが、Webサービスで実行している場合は、Webサービスで使用されているユーザーIDのディレクトリが検索されます。

cmdを開き、GPGインストールディレクトリに移動して、gpg-hと入力します。上部のどこかに、ログオンしているユーザーのキーリングファイルが配置されているパスが表示されます。

これを修正するためにできることは、キーリングファイルをWebサービスユーザーが見つけると予想される場所にコピーすることです。別のキーリングファイルの場所を選択するためのgpgのコマンドラインオプションがあるかどうかわからない。

于 2010-04-20T15:23:32.087 に答える
0
static bool EncryptPGP(string inFile, string outFile)
    {
        try
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\GNU\GnuPG"); //LocalMachine
            if (key != null)
            {
                string path = key.GetValue("Install Directory").ToString();
                string pgpPath = string.Format("{0}\\gpg.exe", path);//@"C:\tools\GNU\GnuPG\gpg.exe";
                string password = "No no no no no";
                string keyName = "hihi";
                string args = string.Format(@"--batch --yes --passphrase {0} --recipient {1} --encrypt --output ""{2}"" --sign ""{3}""", password, keyName, outFile, inFile);
                Process proc = Process.Start(pgpPath, args);
                if (!proc.HasExited)
                {
                    proc.WaitForExit();
                }
                return proc.ExitCode == 0;
            }
        }
        catch (Exception exc)
        {
            Console.WriteLine(exc.Message);
        }
        return false;
    }
于 2010-04-20T14:40:13.560 に答える