2010-11-01 76 views
2

我正在使用命令行對我發送的文件進行加密,但我試圖弄清楚如何使用相同的方法來解密它們。如果我運行該命令,系統會提示您輸入密碼,但我沒有看到使用命令行傳遞密碼的方法。這裏是我正在加密文件:命令行GPG使用c#解密 - 密碼?

var proc = new Process(); 
proc.EnableRaisingEvents = false; 
proc.StartInfo.WorkingDirectory = "C:\\"; 
proc.StartInfo.FileName = @"C:\Progra~1\GNU\GnuPG\gpg.exe"; 
proc.StartInfo.Arguments = @"-e -u ""[email protected]"" -r ""[email protected]"" ""C:\file.csc"""; 
proc.Start(); 
proc.WaitForExit(); 

**下面是用於我的解決方案有用的鏈接: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/38c21304-fc7a-42cc-a5fb-dcb6da7f6411/

回答

2

酒店Process.StandardInput應該給你一個StreamWriter,你可以用它來提供標準輸入的密碼。

+0

我試圖通過使用MSDN示例添加以下幾行來使其工作,但它似乎並未將密碼發送到顯示器。我必須手動輸入到cmd窗口中。 proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true; proc.Start(); StreamWriter myStreamWriter = proc.StandardInput; myStreamWriter.Write(「1234」); myStreamWriter.Close(); – Scott 2010-11-01 18:24:27

+0

我現在開始工作了。 proc.Start(); proc.StandardInput.WriteLine(password); proc.StandardInput.Flush(); – Scott 2010-11-01 18:46:01

0

Linux上的GPG具有--passphrase-fd N,其中N是int。如果N == 0,則從標準輸入讀取密碼。

不確定是否同樣適用於Windows,但可能值得檢查。

+0

是的,在Windows上可用(至少使用gpg4win安裝)。 – Thierry 2015-01-29 14:59:59

0

使用--passphrase-fd 0讓GPG從標準輸入中取得密碼,然後使用管道傳遞它。

echo 123456| gpg --passphrase-fd 0 -e -u [email protected] -r [email protected] C:\file.csc 

gpg --passphrase-fd 0 -e -u [email protected] -r [email protected] --passphrase-fd 2 file.csc < password.file 

確保你沒有通過任何多餘的空格標準輸入莫名其妙的GPG不處理那些好。

我不確定你如何在.NET上傳遞stdin上的東西,所以你必須填補那裏的空白。

+0

我得到了第一個工作,但我的密碼包含一個'>',所以我用另一個文件的密碼不包含這個字符的例子。我有一個使用--passphrase-file「pass.txt」的原始文件,但它在文本文件中與我的密碼不兼容。 – Scott 2010-11-01 18:36:07