我认为你还是应该考虑DPAPI;不用于加密数据文件,而是用于加密秘密字符串。
有没有可能要问你的用户只需一次输入所述秘密串*如果你能,你会则:
- 使用DPAPI将其加密
- 然后存储加密值某处(配置文件,设置文件,注册表,无论你喜欢什么,最好是保护用户,而不是普通公众)。
- 然后,当你需要它时,使用DPAPI检索秘密字符串
- 使用其余的代码因为你已经拥有了它。
由于您的数据文件仍然会被AES以相同的秘密字符串加密,所以它们仍然可以互换。 (在具有相同秘密字符串的人群中...所以现在你已经创建了它,以便您的应用可以拥有多个安全群组,每个群组都设置自己的秘密......但这是一条切线。)
优势即使有人得到你的代码,也没有任何逆向工程会回馈秘密字符串。因为它不在那里。
请注意,这比单独使用混淆更好。通过模糊处理,如果攻击者获得了代码并可以在自己的环境中运行代码,则他们可以附加一个调试器,并在将该字符串传递给AES代码时停止。他们不必关心你使用多少技巧来争夺它。他们在解读完之后才会观看它。使用DPAPI,除非他们在用户的上下文中运行您的代码,否则无法工作......在这种情况下,无论如何游戏。
我不是说DPAPI是完美的,但在这种情况下,我会真正考虑它,然后再诉诸单独的混淆。 (您仍然可以通过模糊处理工具运行您的代码:这也是一件好事,仅仅是不够)。
*如果不是,您可以在安装/初始配置时提供吗?我已经在文件中看到了一些以纯文本形式安装密钥的地方,然后程序会在首次使用时对其进行加密。
来源
2012-08-17 02:55:26
eol