具有国际字符的PGP加密

时间:2012-11-28 15:04:49

标签: c# asp.net encoding pgp

我有一个使用C#构建的Web应用程序,它根据用户输入信息创建一个txt文件。然后通过命令行工具将此txt文件转换为应用程序中的PGP。

如果用户输入国际字符,则在解密PGP文件时会更改它们 例如。如果用户输入:“ó”,我在解密PGP后将其转换为“³”。

创建的txt文件中包含正确的字符,但转换回txt时却没有。我想这是一个编码问题,但我不知道该尝试什么。

这就是我的代码:

//Create the text file
            using (StreamWriter sw = File.CreateText(filePath + fileName)) //Create text file 
            {
                sw.Write(bodyText); //Add body text to text file.
            }
//PGP Encrypt
            using (Process cmd = new Process()) //Open the pgp command line tool and start it using the arguments.
            {
                cmd.StartInfo.WorkingDirectory = "C:\\Program Files\\PGP Corporation\\PGP Command Line\\";
                cmd.StartInfo.UseShellExecute = false;
                cmd.StartInfo.FileName = "pgp.exe";
                cmd.StartInfo.Arguments = arguments;
                cmd.StartInfo.CreateNoWindow = true;
                cmd.StartInfo.RedirectStandardInput = true;
                cmd.StartInfo.RedirectStandardOutput = true;
                cmd.StartInfo.RedirectStandardError = true;
                cmd.Start();
                cmd.WaitForExit();
                cmd.Close();
            }

2 个答案:

答案 0 :(得分:0)

似乎您的PGP解密工具将文件解释为以UTF-8编码。 所以尝试编写UTF-8编码的文件

答案 1 :(得分:0)

编辑:实际上sw.Write写一个带有BOM的文件更有意义,但是PGP解密可能没有,所以如果你打开记事本会默认为Windows-1252什么时候没有BOM?如果是这种情况,您可以尝试使用C#读取解密文件,并在打开时将编码指定为UTF8。

我发现的Ã字符通常来自Windows-1252 Encoding.GetEncoding(1252)被解释为UTF8,反之亦然。一些较旧的程序将默认使用它,或者从Web源使用它,因此问题可能比您的PGP加密更远。

尝试将文件写为Windows-1252(也许PGP实际默认为Windows上的文件),或者确保在写出文件时它有一个BOM用于UTF8