2012-02-24 86 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