vb.net&命令行:使用GnuPG解密路径中的空格

时间:2016-01-05 11:07:10

标签: vb.net terminal gnupg

我一直在努力解决这个问题。我试图使用GnuPG在vb.net中解密文件。如果文件路径没有空间,我可以成功解密文件。但是当有空格时,GnuPG会返回错误。我不知道如何用空格构造我的字符串,以便GnuPG能够处理它。

到目前为止这是我的代码..

Dim runDate As date
Dim destFolder As String
Dim fullName As String
Dim cmdShellTemp As String

destFolder = """\\srvDat\DATA\ORTSS\RECON\ASTD rem\"""

fullName = runDate.ToString("yyyyMMdd") & "myFile.pdf.pgp"
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
cmdShell = cmdShellTemp.Replace("\", "/")
Shell(cmdShell)

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

修改

查看PGP命令行文档后,它指定提供给decrpyt命令的所有文件都被视为以空格分隔。考虑到这一点,在提供整个路径时,您无法实现目标(除非路径不包含空格)。您需要在包含文件的目录中启动命令提示符,并相对引用它们。

Page 69 of the instruction manual states

  

使用PGP KMS服务器上的本地密钥或密钥解密加密文件。如果正在解密的数据也被签名,则在解密过程中自动验证签名。

     

使用格式为:
  pgp --decrypt <input> [<input2> ...] [<inputd>...] [options]

     

其中:
  <input>(必填)。 要解密的文件的空格分隔名称。

(面向字符串连接的原始答案):

即使没有空格,它也应该允许路径周围的引号,所以也许只是强制执行引号。试试这个:

Dim runDate As date
Dim destFolder As String
Dim fullName As String
Dim cmdShellTemp As String

destFolder = "\\srvDat\DATA\ORTSS\RECON\ASTD rem\" '// note the removed quote marks

fullName = runDate.ToString("yyyyMMdd") & "myFile.pdf.pgp"
cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"
cmdShell = cmdShellTemp.Replace("\", "/")
Shell(cmdShell)

最终问题在于您的引言 - 您添加了两次:

destFolder = """\\srvDat\DATA\ORTSS\RECON\ASTD rem\"""

会产生"\\srvDat\DATA\ORTSS\RECON\ASTD rem\"和:

cmdShellTemp = "gpg --batch --passphrase """ & pgpPassphrase & """ --decrypt-files """ & destFolder & fullName & """"

会以类似的方式结束:

  

gpg --batch --passphrase "pass123" --decrpyt-files ""\\srvDat\DATA\ORTSS\RECON\ASTD rem\"20120105myFile.pdf.pgp"

在文件路径中生成不需要的引号