我有一个带加密文本的文本文件。例如:
휗✹➂鳄ⅅⵘ械뱥间뒝赡ꤦ掁☞ೇ
쎠ԠƳᒸ略ⱉ㾤歓ر㗋鲔\ 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 :(得分: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)