Unicode字符串的问题

时间:2013-10-29 08:20:49

标签: c# encryption encoding

我有一个带加密文本的文本文件。例如:

휗✹➂鳄ⅅⵘ械뱥间뒝赡ꤦ掁☞ೇ

쎠ԠƳᒸ略ⱉ㾤歓ر㗋鲔\ 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);  

但同样的问题也出现了。

有人有想法吗?

1 个答案:

答案 0 :(得分: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)