我正在处理用C#编写的Windows桌面应用程序(WPF),它在每次启动时从服务器下载一些文件。这些文件在使应用程序正常工作方面发挥着重要作用。
我想通过某种形式的加密来保护这些文件的内容,例如AES。即使应用程序读取这些文件,这些文件仍应保持加密状态。所以我正在寻找一种在应用程序访问文件时动态解密文件的方法。换句话说,只有应用程序可以理解文件,但如果用户用其他程序打开它们,它们将被加密。
如果您可以分享有关实施的一些想法或文章,那将是很棒的。谢谢!
编辑1: 该应用程序使用 CefSharp 来浏览每次启动时从服务器下载的 HTML / JS / CSS文件。
编辑2:我正在尝试实施 TrueCrypt 之类的内容。
编辑3:我想如何做TrueCrypt可以做的事情。它加密文件,加密文件可以由任何程序打开,因为它会在文件打开时动态解密。我需要这个,因为我想保护我的应用程序的嵌入式浏览器(CefSharp)加载的HTML / JS / CSS文件。
答案 0 :(得分:2)
您需要意识到无法阻止用户在PC等开放平台上访问未受保护的文件。这就是DRM几十年来试图实现的目标,但根据定义,这个目标是unachievable。
你唯一能做的就是让访问未受保护的文件变得更难/更麻烦,但最后,如果有人决定投入足够的精力来规避你的保护,那么她或他将永远成功。
例如,您可能会混淆源文件(通过专用的混淆器或只是通过最小化它们),您可以使用一些非标准文件编码(反向base64),或者您可以使用某种加密方法。因为您还需要发送密钥,所以任何加密方法都可以,无论它有多安全或不安全。
最后,正如其他人已经提到的那样,加密原语位于System.Security.Cryptography
命名空间中。但请注意,对于安全敏感系统,我不建议直接使用它们,因为有许多细微差别并且正确实现它实际上非常困难。你应该看看像SecurityDriven.Inferno这样的库,它们用加密默认值包装加密原语。
答案 1 :(得分:0)
您应该使用.NET-Framework的 these examples. 。 System.Security.Cryptography Namespace和Here您可以找到两个可以使用的示例。
注意:首先,您必须使用FileStream或here读取文件AS BYTES []的内容。而且你必须实现你的KEY - 这意味着它在你的应用程序中是硬编码的,并且可以使用反编译器找到它! 因此,几乎不可能阻止用户读取数据。
答案 2 :(得分:0)
正如托马斯所说,使用System.Security.Cryptography
是加密数据的最佳方式。但是,您需要在客户端应用程序中包含加密密钥,任何有权访问此应用程序的人都可以轻松提取密钥。
最好不要浪费时间加密文件。