我正在用C#开发一个个人/实用应用程序来加密某些文件,而无意共享这些加密文件。
我读了多篇有关加密,AES,padding oracle攻击,HMAC和所有这些内容的文章。我当然不明白我读过的全部书的一半,但我想我已经了解了。也许不是,我要谈论的想法是完全荒谬的:)
因此,在开发过程中,我有了使加密“复杂化”的想法,因此解密将更加复杂。
我已经开发出的第一个想法是,在加密前后向文件中随机添加一些额外的字节:
我用一个1兆字节的缓冲区读文件,无论是一次还是一次,都这样做,然后在文件的不同位置随机添加一个随机字节数组。
像这样的东西:
while ((read = streamIn.Read(buffer, 0, buffer.Length)) > 0)
{
streamOut.Write(buffer, 0, read);
if (random.Next(0, 2) == 1)
{
byte[] extraBytes = GenerateRandomBytes();
streamOut.Write(extraBytes, 0, extraBytes.Length);
}
}
然后我用AES加密所有这些字节。
然后我重复第一步:使用缓冲区读取加密的字节,然后随机添加一些字节。
我已经对此进行了编码,当然,如果我不考虑加密后添加的额外字节,即使使用了良好的密码/盐等,也无法解密该文件。解密后,如果我不这样做考虑到我在加密之前添加的额外字节,那么我很可能会得到损坏的文件。
所以我只想知道这是一个好主意,还是没用,因为一个好的黑客会使用某种数学函数知道哪些字节是正确的,哪些字节是错误的...
我没有开发的另一个想法是分割文件的内容,分别加密每个部分,然后将它们连接起来:
我读取了文件的全部内容,获取了前半部分,使用密码,随机IV等对其加密,然后获取了后半部分,使用另一个密码和另一个随机IV对其进行了加密,然后两个加密部分,然后将所有内容写入文件。我想,为了解密文件,我必须保存每次加密的长度,以便我可以分割它们并解密每个部分等。当然这并不复杂。但是再次,我只想知道它是否完全没用。
谢谢您的时间。