Расшифровка строки GPG из командной строки
Я пытаюсь написать консольное приложение, которое будет расшифровывать подпись gpg по запросу. Все идет хорошо, за исключением той части, где он запрашивает мой пароль GPG. Как вызвать gpg --decrypt из командной строки без диалогового окна ввода пароля?
Вот мой код до сих пор:
var startInfo = new ProcessStartInfo("gpg.exe");
startInfo.Arguments = "--decrypt"; //this is where I want to insert "--passphrase MyFakePassword"
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.WorkingDirectory = @"C:Program Files (x86)GNUGnuPG";
var proc = Process.Start(startInfo);
var sCommandLine = stringData + "n"+(char)26+"n"; //stringData is the encrypted string
proc.StandardInput.WriteLine(sCommandLine);
proc.StandardInput.Flush();
proc.StandardInput.Close();
var result = proc.StandardOutput.ReadToEnd();
Я пробовал использовать --passphrase MyFakePassword, --passphrase-fd MyFakePassword и даже --passphrase-fd 0 с моим паролем на первой строке ввода. Я бы не хотел помещать свой пароль в txt-файл на машине, на которой выполняется этот код, если вообще возможный.
Заранее спасибо за любую помощь.
4 ответов:
Используйте опции
--batch --passphrase-fdвместе, напримерgpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgpВ коде после
proc.StandardInput.WriteLine(sCommandLine);добавьте следующее:proc.StandardInput.WriteLine("your passphrase here"); proc.StandardInput.Flush();
Я еще немного покопался. Несколько месяцев назад кто-то сообщил об этом как об ошибке на форумах Gpg4Win. Единственными решениями на данный момент являются откат от версии 2.1.0 к предыдущей версии (не вариант в моем случае), отключение пароля для ключа или передача его из текста. Вот сообщение на форуме: http://wald.intevation.org/forum/forum.php?thread_id=1116&forum_id=21&group_id=11 Нет комментариев от команды разработчиков.
Чтобы избежать диалогового пароля попробуйте этот метод, я использую его, и он отлично сработал, вы найдете более подробную информацию.
Http://www.systemdeveloper.info/2013/11/decrypt-files-encrypted-with-gnupg-from.html
public static string DecryptFile(string encryptedFilePath) { FileInfo info = new FileInfo(encryptedFilePath); string decryptedFileName = info.FullName.Substring(0, info.FullName.LastIndexOf('.')) + "Dec.TXT"; string encryptedFileName = info.FullName; string password = System.Configuration.ConfigurationManager.AppSettings["passphrase"].ToString(); System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd.exe"); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.WorkingDirectory = @System.Configuration.ConfigurationManager.AppSettings["WorkingDirectory"].ToString(); System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi); string sCommandLine = @"echo " + password + "|gpg.exe --passphrase-fd 0 --batch --verbose --yes --output " + decryptedFileName + @" --decrypt " + encryptedFileName; process.StandardInput.WriteLine(sCommandLine); process.StandardInput.Flush(); process.StandardInput.Close(); process.WaitForExit(); //string result = process.StandardOutput.ReadToEnd(); //string error = process.StandardError.ReadToEnd(); process.Close(); return decryptedFileName; }
Примечание: это риск для безопасности!
так или иначе,
Парольная фраза при подписании или расшифровке, если вы не используете симметричную шифрование. На странице справочника задокументированы следующие параметры:
--строка парольной фразы
Используйте строку в качестве пароля. Это может использоваться только в том случае, если задана только одна парольная фраза. Очевидно, что это очень сомнительная безопасность в многопользовательской системе. Не используйте этот вариант, если вы можете его избежать.
-- парольная фраза-fd n
Считайте парольную фразу из файлового дескриптора n. только первая строка будет считана из файлового дескриптора n. если вы используете 0, то парольная фраза будет считана из stdin. Это может быть только используется, если указана только одна парольная фраза.
--passphrase-file fileСчитайте пароль из файла file. Только первая строка будет прочитана из файла file. Это можно использовать только в том случае, если задана только одна парольная фраза. Очевидно, это пароль. на хранении в файле сомнительной безопасности, если другие пользователи могут прочитать этот файл. Не используйте этот вариант, если вы можете его избежать.
Официальная утилита командной строки pgp предлагает эту возможность с флагом-z:
Pgp-esa $SOURCEFILE $RECIPIENTPUBLICKEY-u $SENDERPRIVATEKEY-z $ Парольная фраза
Comments