C#使用PGP-ka命令重定向standardinput

C#使用PGP-ka命令重定向standardinput,c#,C#,我遇到了一个看起来很愚蠢的问题。我一定是错过了什么傻事。我们的一台生产服务器上有一个PGP密钥环。为安全起见,不允许以交互方式登录它所属的用户帐户。我们的问题是,我们有时需要添加新的密钥,但这并不容易。因此,我们认为我们可以创建一个快速控制台应用程序,该应用程序将作为其ID运行,并通过命令行调用PGP命令 C:\Test>TestConsoleApp.exe Pretty Good Privacy(tm) Version 6.5.2 (c) 1999 Network

我遇到了一个看起来很愚蠢的问题。我一定是错过了什么傻事。我们的一台生产服务器上有一个PGP密钥环。为安全起见,不允许以交互方式登录它所属的用户帐户。我们的问题是,我们有时需要添加新的密钥,但这并不容易。因此,我们认为我们可以创建一个快速控制台应用程序,该应用程序将作为其ID运行,并通过命令行调用PGP命令

    C:\Test>TestConsoleApp.exe
    Pretty Good Privacy(tm) Version 6.5.2
    (c) 1999 Network Associates Inc.
    Uses the BSafe(tm) Toolkit, which is copyright RSA Data Security, Inc.
    Export of this software may be restricted by the U.S. government.

    WARNING: Environmental variable TZ is not       defined, so GMT timestamps
            may be wrong.  See the PGP User's Guide to properly define TZ

    Looking for new keys...
    DSS  2048/1024 0xDE053A3D 2007/05/29 Batch Interface <batch@netgiro.com>
    sig?           0xDE053A3D             (Unknown signator, can't be checked)

    keyfile contains 1 new keys. Add these keys to keyring ? (Y/n)
    C:\Test>
该命令被调用,但它要求输入以确认我们正在执行的操作。我们的问题是,我们发送给standardinput的“y”从未显示,并且密钥未经验证

代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.DirectoryServices;
using System.Threading;

namespace TestConsoleApp
{
    class RegExValidator
    {
        private System.Diagnostics.Process myProcess;

        public RegExValidator()
        {
        }

        public static void Main(string[] args)
        {
            RegExValidator myValidator = new RegExValidator();
            myValidator.InstallKeys("C:\\Test\\batch.asc", "batch.asc");
        }


        private void InstallKeys(string keyPath, string keyName)
        {
            myProcess = new System.Diagnostics.Process();
            myProcess.StartInfo.RedirectStandardInput = true;
            myProcess.StartInfo.CreateNoWindow = false;
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.FileName = "pgp";
            myProcess.StartInfo.Arguments = "-ka " + keyPath + "";
            myProcess.Start();

            StreamWriter myInput = myProcess.StandardInput;
            myInput.AutoFlush = true;
            Thread.Sleep(3000);

            myInput.WriteLine("y");

            myInput.WriteLine(Environment.NewLine);

        }

    }

}
这是我们在命令行上得到的输出

    C:\Test>TestConsoleApp.exe
    Pretty Good Privacy(tm) Version 6.5.2
    (c) 1999 Network Associates Inc.
    Uses the BSafe(tm) Toolkit, which is copyright RSA Data Security, Inc.
    Export of this software may be restricted by the U.S. government.

    WARNING: Environmental variable TZ is not       defined, so GMT timestamps
            may be wrong.  See the PGP User's Guide to properly define TZ

    Looking for new keys...
    DSS  2048/1024 0xDE053A3D 2007/05/29 Batch Interface <batch@netgiro.com>
    sig?           0xDE053A3D             (Unknown signator, can't be checked)

    keyfile contains 1 new keys. Add these keys to keyring ? (Y/n)
    C:\Test>
C:\Test>TestConsoleApp.exe
非常好的隐私(tm)版本6.5.2
(c) 1999年网络联合公司。
使用BSafe(tm)工具包,该工具包由RSA Data Security,Inc.版权所有。
美国政府可能会限制本软件的出口。
警告:未定义环境变量TZ,因此GMT时间戳
可能是错的。请参阅PGP用户指南以正确定义TZ
正在寻找新钥匙。。。
DSS 2048/1024 0xDE053A3D 2007/05/29批处理接口
西格?0xDE053A3D(签名者未知,无法检查)
密钥文件包含1个新密钥。将这些键添加到keyring?(是/否)
C:\Test>
有人能帮忙吗

谢谢

编辑

我们尝试了这个过程,但是我们没有使用PGP,而是移动了一个文件,我们得到了Y/N框,这很有效。似乎您可能无法使用PGP完成此操作。不知道为什么。

消息

keyfile contains 1 new keys. Add these keys to keyring ? (Y/n)
建议使用大写Y进行回复。尝试将您的呼叫更改为:

myInput.WriteLine("Y");
(我没有安装用于检查的PGP,但遇到了坚持使用case的其他命令行界面。)

另一件要尝试的事情是,清除流的所有缓冲区,并将任何缓冲数据写入底层设备:

myInput.WriteLine("Y");
myInput.Flush();

您好,Gimel,谢谢您的回复,但它没有工作,我们得到了完全相同的输出。下一步要尝试的是Stream.Flush