C# 附加到使用加密流加密的文件后解密失败

C# 附加到使用加密流加密的文件后解密失败,c#,.net,cryptography,C#,.net,Cryptography,希望你能帮忙。我正在创建一个文件,并使用加密流将行附加到此文件。 如果我一次写出所有行,那么文件将正确加密/解密。 但如果我以追加模式打开文件,追加一行,然后关闭文件。然后只有第一行正确解密,其他行返回垃圾 我想知道这是不是正确的行为。我试图建立一个文本文件,其中包含用户在一天内输入的加密细节;然后在一天结束时批量处理它们。 解密和加密整个文件只是为了在其中添加一行代码的开销似乎太大了,因为我可能在一天的时间里有1000行代码 我正在使用EXACT相同的加密提供程序,对文件的所有访问都使用相同的

希望你能帮忙。我正在创建一个文件,并使用加密流将行附加到此文件。 如果我一次写出所有行,那么文件将正确加密/解密。 但如果我以追加模式打开文件,追加一行,然后关闭文件。然后只有第一行正确解密,其他行返回垃圾

我想知道这是不是正确的行为。我试图建立一个文本文件,其中包含用户在一天内输入的加密细节;然后在一天结束时批量处理它们。 解密和加密整个文件只是为了在其中添加一行代码的开销似乎太大了,因为我可能在一天的时间里有1000行代码

我正在使用EXACT相同的加密提供程序,对文件的所有访问都使用相同的初始化向量和密钥

我是否做错了什么,或者无法附加到加密文件中

干杯
Noel

是的,这是预期的行为。您可以做的一件事是分别加密每个记录(文本行),并添加一个前缀,指示块的开头及其长度。然后在读取文件时,读取前缀,检查记录长度并加载记录。重复每个记录

我怀疑您使用的密码是流密码或链式密码-这意味着一个加密块的输出用于修改下一个块。直接附加到此类数据,然后尝试解密该批次将不起作用,因为块之间的依赖关系将被打破


解决此问题的一个简单方法是为文件中每条记录的偏移量+长度添加一个标记或保存一些数据。当你来进行批处理时,你需要为每条记录重置加密提供程序。

谢谢Eugene,这很有意义,我会继续进行这方面的工作。我对每个块进行了加密,并对其进行Base64编码,然后一次将其写入文件一行,这就成功了。