防傻瓜加密解密文本文件
本文关键字:文件 文本 加密解密 傻瓜 | 更新日期: 2023-09-27 18:17:09
请考虑以下情况:
- 我把一个文本文件加密后,它在网络上不同用户下载。
- 每个用户在PC上都有一个wpf应用程序,该应用程序在只读编辑器中显示文件中的文本(解密后)。
- 目的是没有wpf应用程序的人不能查看文件的内容。
问题在于解密文件所需的密钥。WPF (c#)应用程序可以反编译提取密钥。如果在c++ DLL中嵌入密钥并在c#中调用它(将密钥传递给解密算法),则再次类似于前面的情况。我能想到的其他解决方案也有类似的风险。
你能在这种情况下指导我吗?问题是,每次用户运行应用程序时,我都无法从web服务器获得密钥。它必须存储在用户的PC上或应用程序内。
感谢大家的时间和耐心。
编辑:我正在开发一个应用程序,该应用程序读取一个文件,该文件只能在我的应用程序中打开。因此,我想到的第一个解决方案是加密文件,并将密钥保存在应用程序中或不同的地方,并在运行时进行组合。这些都是有缺陷的方法。请记住,应用程序必须离线工作。这种方法更简单,但不安全,因为一旦文件被解密为纯文本,那么它就可以很容易地共享。目的是使那些拥有此应用程序的人可以使用这些内容。
另一种方法是使用专有格式,例如受微软drm保护的LIT。这种格式的文件可以在Microsoft Reader中读取。这似乎是一个更大的任务。我需要帮助知道它是否安全,与以前的方法相比,将保护文件中的版权信息,或者它可以很容易地被破解(使用任何方法),就像我第一次提到的方法。此外,用c++编写这个应用程序是不是一个好主意,因为它要编译成机器码,而机器码不容易转换成源代码。谢谢你。
这个问题只有两种解决方案(即使这样也不是100%安全)。两者都涉及"不在应用程序中存储密钥"。
- 允许用户输入密钥。
- 从某个服务器获取密钥。
确保服务器也使用例如https加密,或者有人可以通过扫描网络数据包来解密它。
无论你想出什么解决方案,在机器上本地存储一个密钥,都有可能被有权访问可执行文件(或DLL或其他)的人找到,实际上没有办法。您可以通过将密钥"隐藏"在几个地方并进行复杂的计算来使其变得更加复杂,但是"隐藏安全性"只会阻止那些急于寻找解决方案的人。
即使您不存储密钥,运行应用程序的人也可以在调试器中停止并在解密发生时检查密钥。从字面上讲,没有办法通过隐藏密钥来使加密和解密(至少在软件中)完全"牢不可破"——密钥必须在解密过程中存在,这样才能被找到。
然后归结为"你愿意花多少精力来让这个过程变得更加困难",记住,如果联邦调查局,国家安全局,GCHQ,克格勃或其他类似的机构投入100名最优秀的人来破解你的代码,他们可能会,不管你想出什么。[事实上,他们可以通过简单地在许多机器上运行来破解它,因为这些组织有大型集群可供他们使用,所以如果破解很重要,这将是这些组织的一种资源]。如果您试图防止"John Smith"使用该应用程序,并且不是特别精通计算机,那么将解密密钥存储在应用程序本身中是完全可以的。在这些职位之间,你有一些人,作为一种爱好,打破程序中的代码。他们会在100名政府机构工作人员面前放弃,但显然比"约翰·史密斯"付出了更多的努力和技巧。