简体   繁体   中英

GPG decryption without passphrase, working on local but fails on IIS and hosted environment

I am using gpg encryption decryption, which is working fine on my local system (while running on VS2015) but it fails when I host it to server/or try running it from local IIS. It doesnt prompt for any runtime error, but dont create the decrypted file. here is the command:

gpg --local-user XXXXXT21XXX --output C:\Projects\myserver.api\Server_Files\input\callback_7a7ac0e3-89b1-4749-8d2a-d40cc84a27d5.xml --decrypt C:\Projects\server.api\Server_Files\Serverinput\callback_7a7ac0e3-89b1-4749-8d2a-d40cc84a27d5.asc

code I am using for decryption:

public string Decrypt(string inputFilePath, string extension = "")
        {
            try
            {
                var process = GetCmd();
                string outputFilePath = $@"{FileHelper.InputPath}\{Path.GetFileNameWithoutExtension(inputFilePath)}{extension}";

                string sCommandLine = $"{command}{string.Format(decCommand, outputFilePath, inputFilePath)}";

                process.StandardInput.WriteLine(sCommandLine);
                process.StandardInput.Flush();
                process.StandardInput.Close();
                process.WaitForExit();
                process.Close();
                return outputFilePath;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 private static System.Diagnostics.Process GetCmd()
        {
            System.Diagnostics.ProcessStartInfo psi =
                 new System.Diagnostics.ProcessStartInfo("cmd.exe");
            psi.CreateNoWindow = false;
            psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            psi.UseShellExecute = false;
            psi.RedirectStandardInput = true;
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardError = true;
            psi.Verb = "runas";
            psi.WorkingDirectory = @"C:\Program Files (x86)\GnuPG\bin";

            System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi);

            return process;
        }

the error :

System.IO.FileNotFoundException: Could not find file 'C:\Projects\Server.api\Server_Files\input\callback_7a7ac0e3-89b1-4749-8d2a-d40cc84a27d5.xml'.
    File name: 'C:\Projects\Server_if.api\Server_Files\input\callback_7a7ac0e3-89b1-4749-8d2a-d40cc84a27d5.xml'
       at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
       at System.IO.File.InternalReadAllText(String path, Encoding encoding, Boolean checkHost)
       at Server.Common.Helpers.FileHelper.ReadAllText(String path) in D:\Projects\TFT\Bitbucket_PAYDO\Server_new\Server.Common\Helpers\FileHelper.cs:line 101
       at Server.API.Controllers.ServerTransferController.<GetServerCallback>d__9.MoveNext()

How can I run the gpg decrypt command without prompting for passphrase?

I found the answer myself, As directed by @RMH, I tried to found the right user for gpg, in my case it was Administrator. What I did was I created a self hosted web api and tried the same code there, and amazingly it started working.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM