c# - 执行复杂加密的想法
问题描述
我正在用 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 加密所有这些字节。
然后我只是重复第一步:我用缓冲区读取加密字节,然后随机添加一些字节。
我已经对此进行了编码,当然,如果我不考虑加密后添加的额外字节,即使使用好的密码/盐等,我也无法解密文件。如果我不解密,则在解密之后考虑到我在加密之前添加的额外字节,那么我很可能会得到一个损坏的文件。
所以我只是想知道这是否是一个好主意,或者它是否没用,因为一个好的黑客会使用某种数学函数知道哪些字节是真的,哪些字节是假的......
我没有开发的另一个想法是拆分文件的内容,分别加密每个部分,然后将它们连接起来:
我读取了文件的全部内容,我取了前半部分,我用 a密码,随机IV等,然后我拿下半部分,用另一个密码和另一个随机IV对其进行加密,然后将两个加密部分连接起来并将所有内容写入文件中。我想,为了解密文件,我必须保存每个加密的长度,以便我可以拆分它们并解密每个部分等。当然这并不复杂。但同样,我只想知道它是否完全没用。
感谢您的时间。
解决方案
推荐阅读
- python - 在python 3中处理mysql结果
- c# - 在控制台窗口中(正确)格式化显示的数据
- python - 如何在 Python 3 中的输入后立即添加字符串?
- python - 为什么我必须单击两次才能滚动?kivy,python中的可滚动标签
- sql - 由于语法错误,无法调用存储过程
- python - 刻度之间的 Matplotlib 绘图市场(X 轴)
- bash - ksh 和 bash 中的环境空间不足我如何查看剩余量
- database - 数据库如何在更快的磁盘上获得更差的基准测试结果?
- r - 将 bookdown 移植到 distill::distill_article 不支持定理环境
- arrays - 这行代码在 Julia 编程语言中是什么意思