我一直在努力解决这个问题。我试图使用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)
有什么想法吗?
由于
答案 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"
在文件路径中生成不需要的引号