GnuPG + веб-сервис + ASP.NET - PullRequest
       15

GnuPG + веб-сервис + ASP.NET

0 голосов
/ 20 апреля 2010

Я измотан. Я установил GnuPG и экспортировал секретный ключ и два открытых ключа (мой и один мой клиент) из другого экземпляра GnuPG. Я пытаюсь настроить метод «мой шифрование / дешифрование» на локальном компьютере.

Когда я запускаю метод шифрования из небольшого консольного приложения, он работает хорошо. Когда я запускаю этот (тот же! - с тем же телом) метод из моего веб-сервиса на моей локальной машине ... У меня ExitCode = 2.

Счастлив на самом деле ловит сообщение об ошибке, но недоволен своим телом.

"gpg: секретный ключ по умолчанию отсутствует: секретный ключ недоступен gpg: XXXXXXXXXXXXXXXX.xml: подписать + ошибка шифрования: секретный ключ недоступен "

Что мне делать? Что не так?

С наилучшими пожеланиями, Кароль Бладек

Ответы [ 2 ]

0 голосов
/ 20 апреля 2010

Файлы ключей создаются для каждого пользователя. При запуске консольного приложения оно будет искать файлы ключей PGP в вашем каталоге, тогда как при запуске в веб-сервисе оно будет искать в каталоге идентификатора пользователя, используемого веб-сервисом.

Откройте файл cmd, перейдите в каталог установки GPG и введите gpg -h. Где-то в самом верху он покажет вам путь, где находятся файлы ключей для вашего вошедшего в систему пользователя.

Что вы можете сделать, чтобы это исправить, - скопировать файлы ключей в то место, где они ожидали найти их для пользователя веб-службы. Не уверен, что в gpg есть опция командной строки для выбора другого расположения файла ключей.

0 голосов
/ 20 апреля 2010
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;
    }
...