如何使用公共密钥加密文件,使用c#和命令行添加到当前密钥环?
感谢。
答案 0 :(得分:4)
嗯,C#的bouncy castle cryptography library可用于加密和解密PGP;这是我们内部用于PGP加密工作的内容。它完全是自包含的,因此不依赖于现有的程序或库。
但请记住,它是一个库而不是命令行程序。如果您需要使用CLI,源代码附带一些示例命令行程序实用程序。
答案 1 :(得分:1)
您可以使用gnupg-sharp,只要您使用GPL和GnuPG即可。
答案 2 :(得分:1)
答案 3 :(得分:1)
你可以使用我一年前写的实现。我知道这有点难看。
你需要pgp.exe及其背景知识。见my blog post。
/// <summary>
/// Encryps given file using PGP Public Key
/// </summary>
/// <param name="filename"></param>
public string Encrypt(string filename, bool isBinary, ref string outstr){
string outputfilename = filename;
//We use stringbuilder for performance considerations
StringBuilder sb = new StringBuilder();
sb.Append("/c ");
sb.Append("");
sb.Append(PGPLocation);
sb.Append(" +force -es ");
sb.Append("\"");
sb.Append(filename);
sb.Append("\" ");
sb.Append(ToUserName);
sb.Append(" -u ");
sb.Append(MyUserName);
sb.Append(" -z ");
sb.Append(PassPhrase);
sb.Append(" ");
// Use binary indicator because PGP produces different outputs for binary and plain text files
if (isBinary)
sb.Append("-a");
proc.StartInfo.Arguments = sb.ToString();
//proc.StartInfo.Arguments = "/c pgp +force -es "+filename+" cumacam -u bugra";
proc.Start();
if (WaitForInfinity)
proc.WaitForExit();
else
proc.WaitForExit(WaitTime);
//string res = proc.StandardOutput.ReadToEnd();
outstr = proc.StartInfo.Arguments;
if (proc.HasExited)
{
int ab = proc.ExitCode;
if (ab != 0)
{
FireError(Convert.ToInt32(ErrorTypes.PGPEncryptError), "Erro No: " + ab.ToString() + "in PGP. Details: "+" "+proc.StandardOutput.ReadToEnd());
return null;
}
else
if (!isBinary)
return outputfilename+".pgp";
return outputfilename + ".asc";
}
return null;
}