【问题标题】:How to choose an encryption algorithm to encrypt/decrypt a file?如何选择加密算法来加密/解密文件?
【发布时间】:2011-10-13 01:48:00
【问题描述】:

最近我正在编写一个需要我加密/解密文件的 QT 程序。我是加密新手,我完全不知道如何使用编程进行加密。谷歌搜索了一段时间后,我发现这个thread 与我的目标非常相似。 他们建议使用crypto++,但我的问题是当我到达那里时,有很多加密选择。我只想加密文件,不需要复杂的文件,也不需要密码来打开文件。只有我的程序可以打开和读取该文件。

我可以知道如何选择适合我的加密算法吗?

谢谢@!

【问题讨论】:

  • 您没有提供足够的信息。您试图向谁隐藏文件内容? (即可以看到文件但看不到您的应用程序可执行文件的其他用户,可以同时看到但不能运行后者的人,可以运行您的应用程序的人)。他们看不到它有多重要?你是否试图让它变得足够困难以至于不值得他们花时间,或者几乎不可能?他们的决心和 IT 能力如何?它是什么类型的文件内容(例如数字、文本、可执行代码)?
  • 传统的ROT13加密怎么样?它也可以在没有密码的情况下工作...... ;-)
  • 解密算法选择方便;它必须是加密算法的逆算法。
  • @Tony:我试图向用户隐藏文件的内容,任何使用该程序的人。精通计算机或文员并不重要。该文件的内容是一组配置设置,用于控制程序的行为方式。它存储设置配置,某种 INI 文件,但我以 XML 格式存储它。我加密它的原因是因为我担心用户会弄乱程序的行为。我在想一个简单的就可以了,我不需要一个非常复杂的算法。 :o)

标签: c++ qt encryption


【解决方案1】:

也许对密码算法的简短(非常简短)介绍会有所帮助:

  • 对称加密:使用相同的密钥进行加密和解密。示例包括 DES、AES 和 Blowfish。
  • 非对称加密:需要特定的密钥来加密(公共),以及不同的密钥来解密(私人)。示例包括 RSA、DSA 和 ElGamal

对于这个应用程序,我建议使用对称算法,AES 可能是一个不错的选择 (AES256)。不管你使用什么,总会有一个密钥(否则它不会是很好的加密)。简单的方法是将密码直接存储在程序中。这将允许您的用户避免输入任何内容,但坚定的攻击者即使在已编译的二进制文件中也可以轻松找到密码。

除非您提供更多详细信息,否则我将尽可能具体。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    鉴于您在对我对该问题的评论的回复中对目的的解释,似乎除了对 XML 进行低级混淆之外没有什么意义。例如,您可以简单地将文件内容与任意值(例如 AA 十六进制)或您在连续字符上使用的少量值(AA、23、B7、...)进行异或,然后循环使用 AA再次。听起来使用真正的加密库并没有多大好处:任何决心搞砸软件操作的人无论如何都会找到方法....

    【讨论】:

      【解决方案3】:

      最简单的“真实”对称算法可能是河豚,sample code in 'c' and'c++' 很容易集成到您的代码中

      有一个独立的QCrypto lib(不是主要 Qt src 的一部分),但它可能比您需要的要复杂一些

      【讨论】:

      • 不,不应该告诉有人问“我应该使用什么密码”“去实现那个密码”。应该告诉他们使用来自高质量库的标准算法。
      • 该链接是该算法的作者(Bruce schneier)和其他人的标准算法准备使用代码
      • RC4 的编程比 Blowfish 简单得多。
      • @rossum - 有趣的是我没有看过 RC4。我只记得能够理解河豚!
      • 问题在于示例或参考代码不一定是高质量的实现。那里有 14 个不同的版本,没有迹象表明哪些版本已经过缓存攻击、定时攻击等的审查。对于提问者的特定用例,这无关紧要,但读到这篇文章的人可能会被误导去抓住任何旧的似乎可行的事情,这是一个非常糟糕的主意
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2018-02-06
      • 1970-01-01
      相关资源
      最近更新 更多