2012-02-24 88 views
-1

我试图加密文本并将加密文本保存为字符串 变量和文本文件。C#加密字符串变量

但令人惊讶的是,字符串中的加密文本与文本文件中的加密文本不一样,看起来不像 。

E.g串= bpAz1pcidPuCXbpO + 5RYvQ ==

textfile = n3Ö—"tû‚]ºNû”X½ 

我真的很喜欢我的字符串变量具有相同的数据,我 TextFile.txt的。我的意图是加密字符串变量而不是文本文件。 那么我如何加密我的字符串变量以与我的文本文件数据相同的方式进行加密?

这里是我下面的代码:

 byte[] plainTextBytes = Encoding.UTF8.GetBytes("my name is calito"); 

     MemoryStream memoryStream = new MemoryStream(); 

     TripleDESCryptoServiceProvider cryptAlgorithm = new TripleDESCryptoServiceProvider(); 
     CryptoStream csEncrypt = new CryptoStream(memoryStream, cryptAlgorithm.CreateEncryptor(), CryptoStreamMode.Write); 

     csEncrypt.Write(plainTextBytes, 0, plainTextBytes.Length); 

     //copying encrypted text to string 
     byte[] cipherTextBytes = memoryStream.ToArray(); 
     string cipherText = Convert.ToBase64String(cipherTextBytes); 

     //copying incrypted text to text file 
     File.WriteAllBytes(@"G:\New Text Document.txt", memoryStream.GetBuffer()); 

回答

4

但令人惊奇的是,在字符串加密的文本不 看起来一样在文本文件中的加密文本。

这是因为您没有将加密字符串写入文件,该文件是实际缓冲区的Base64表示形式,但是您正在写入缓冲区本身。所以,如果你想这样的Base64字符串写入文件,你可以使用WriteAllText方法:

File.WriteAllText(@"G:\New Text Document.txt", cipherText); 
+1

而且,如果您想要内存流中的字节,请改用.ToArray()。 GetBuffer()可能会返回比.Length指示的更大的字节数。 – 2012-02-24 07:36:10

0

您在文本文件有什么实际字节。你在字符串中得到的是相同字节的base64编码变体。

+0

好的,谢谢。那么是否可以将缓冲/实际字节写入我的字符串变量?我之所以要这样做,是因为我喜欢缓冲区数据的表现方式 - 这是不可读的。 – 2012-02-24 07:57:57

+0

哦,我确实得到了一个解决方案。以下代码可以解答我的问题。 memoryStream.Position = 0; var sr = new StreamReader(memoryStream); cipherText = sr.ReadToEnd(); 谢谢你的努力。 – 2012-02-24 08:27:18