我正在实现一个基于web的文件存储服务(C#)。服务器上存储的文件将被加密,但挑战在于如何实现解密功能。
文件可以是任意大小,从几KB到数GB。数据传输是分块的,这样用户可以从偏移量50000、75000等处下载数据。这对于未加密的文件有效,但如果使用加密,则必须在从偏移量读取每个块之前解密整个文件。
因此,我正在研究如何解决这个问题。我的研究表明,可以使用ECB和CBC。ECB是最基本的(也是最不安全的),每个块都单独加密。ECB的工作方式非常符合我的要求,但安全性成为了问题。CBC类似,但需要在解密当前块之前解密前一个块。只要从头到尾读取文件并在服务器上解密数据,这还可以,但归根结底,与在服务器端传输前解密整个文件没有太大区别。
是否有其他我应该考虑的选择?目前我还没有编写代码,因为我仍然只是进行理论研究。