2013-10-29 126 views
1

我有一個帶有加密文本的文本文件。例如:Unicode字符串的問題

휗✹➂鱷ⅅⵘ械뱥間뒝贍ꤦ掁☞ೇ

쎠ԠƳᒸ略ⱉ㾤歓ر㗋鮪\ ud953

現在我想解密這些一個。代碼如下所示:

var lines = File.ReadLines("input.txt"); 
List<string> DecList = new List<string>(); 
foreach(var line in toDecList) 
{ 
    string decrypted = Decrypt(@line); 
    DecList.Add(decrypted);    
} 

File.WriteAllLines("output.txt", toEncList); 

對於第一個示例,我不會收到任何錯誤。第二,我得到了加密異常。如果我將文件中的文本複製到剪貼板並將其直接粘貼到代碼中,則不會出錯。

所以我認爲編碼存在問題。我也試過

var lines = File.ReadLines("input.txt", Encoding.Unicode); 

但是同樣的問題發生。

有人想法嗎?

+0

你確定你正在尋找正確的行結束在加密文件?加密的一段代碼可能在加密的字符串中包含屬於加密數據的行尾。 – PMF

+0

@RoyiNamir爲什麼?我看不懂; )但是要嚴肅地指出你究竟有什麼異常? – Tafari

+0

使用'File.ReadLines(字符串路徑,編碼編碼)'並傳遞文件所具有的編碼。 – helb

回答

0

你需要非常確保文本與字節分開。文本始終是某些字母或其他字符中某些可讀文本的表示。加密文本是一個字節流。混合這兩者會導致問題。例如,UTF-8文本可能不包含某些字節組合,而這些字節可能出現在字節流中。

您的代碼似乎將編碼字節視爲字符串。這是一個根本的錯誤,並會導致問題。如果要將加密的字節存儲爲文本,則需要將字節轉換爲文本格式(例如Base64)進行存儲。然後您需要在解密之前將Base64文本轉換回字節。

喜歡的東西:

encryptedBytes <- encrypt(plaintext, password) 
storableString <- base64(encryptedBytes) 
DB.store(storableString) 

依次爲:

b64Cyphertext <- DB.retrieve() 
cypherbytes <- 46esab(b64Cyphertext) 
decryptedText <- decrypt(cypherbytes, password)