【发布时间】:2012-03-22 09:07:03
【问题描述】:
我正在使用 Qt 资源系统来存储 GUI 中使用的图像和数据库的加密密码。我想存储密码并让用户更改密码。应用程序应该能够记住密码。所以我想将新创建的加密密码存储在应用程序本身中(与嵌入资源的方式相同)。
目前我在编译时将密码文件保存在应用程序资源中。并且编译后密码是不可更改的。
【问题讨论】:
标签: qt4 embedded-resource
我正在使用 Qt 资源系统来存储 GUI 中使用的图像和数据库的加密密码。我想存储密码并让用户更改密码。应用程序应该能够记住密码。所以我想将新创建的加密密码存储在应用程序本身中(与嵌入资源的方式相同)。
目前我在编译时将密码文件保存在应用程序资源中。并且编译后密码是不可更改的。
【问题讨论】:
标签: qt4 embedded-resource
你想要做的是非常糟糕的风格。应用程序永远不需要修改自己的可执行文件。在管理良好的系统中,应用程序的用户无论如何都不能写入安装目录。使用 QSettings,这就是它的用途。如果您真的愿意,可以将其存储在 .ini 文件而不是注册表中。
确保您对密码使用单向函数 - 加密强度高的散列,不是加密。根据定义,加密是双向的:您可以先加密,然后再解密。如果您认为自己是专业人士,那么您永远不会希望将加密一词与单向函数(哈希)互换使用。它们是非常不同的东西,你会而且应该被责骂——我怎么知道你的真正意思,无论你只是对你的语言松散,还是提出一些本质上不安全的建议。
使用密码,您永远不会希望允许解密。如果有人提供密码进行检查,您将加密,然后比较加密版本。这样一来,就很难恢复原始密码(Vinnie 可能在人力资源部使用她的 Facebook 帐户和老板的公司银行帐户)。确保对哈希进行加盐以防止彩虹表攻击。您可能应该确保自己知道自己在做什么:在该领域进行自我教育。没有人与生俱来。让我们避免另一种自制的不安全密码方案......它们太多了,由那些认为在不了解该主题的情况下,他们会以某种方式产生相当安全的应用程序的人完成。唉,现实不能在这里被愚弄,不知道通常意味着确实知道的人最终会查看你的代码(也许是逆向工程),然后嘲笑它......结束咆哮。
【讨论】:
Sorush:这里有几个不太美观但技术性更强的答案:
在 Windows 上,由于操作系统不允许您在运行时编辑可执行文件,这很难做到:https://stackoverflow.com/a/1954479/58133
在 Linux 上,可能可行:http://www.overclockers.com/forums/archive/index.php/t-195048.html
【讨论】: