如何实现动态加密

本文关键字:动态 加密 实现 何实现 | 更新日期: 2023-09-27 18:15:40

我正在开发一个用c#编写的windows桌面应用程序(WPF),每次启动时都会从服务器下载一些文件。这些文件在应用程序的工作中起着重要的作用。

我想用某种形式的加密来保护这些文件的内容,比如AES。即使在应用程序读取这些文件时,它们也应该保持加密。所以我正在寻找一种方法来解密文件时,他们正在被应用程序访问的飞行。换句话说,只有应用程序可以理解这些文件,但如果用户用其他程序打开它们,它们仍然会被加密。

如果你能分享一些关于实现的想法或文章,那就太好了。谢谢!

编辑1:应用程序使用CefSharp来浏览每次启动时从服务器下载的HTML/JS/CSS文件

编辑2:我正试图实现像TrueCrypt

编辑3:我想如何做TrueCrypt可以做什么。它对文件进行加密,加密后的文件可以被任何程序打开,因为只要文件被打开,它就会即时解密。我需要这个,因为我想保护我的应用程序的嵌入式浏览器(CefSharp)加载的HTML/JS/CSS文件。

如何实现动态加密

您需要意识到您无法阻止用户访问您在PC等开放平台上未受保护的文件。这就是DRM几十年来试图实现的目标,然而这个目标从定义上讲是无法实现的。

你唯一能做的就是让访问未受保护的文件变得更困难/更麻烦,然而最终,如果有人决定投入足够的精力来绕过你的保护,她或他总是会成功的。

例如,您可以混淆源文件(通过专门的混淆器或简单地通过最小化它们),您可以使用一些非标准的文件编码(base64的反转),或者您可以使用某种加密方法。因为你也需要发送你的密钥,任何加密方法都可以,不管它有多安全或不安全。

最后,正如其他人已经提到的,加密原语位于System.Security.Cryptography名称空间中。但是请注意,对于安全性敏感的系统,我不建议直接使用它们,因为有许多细微差别,正确使用它们实际上非常困难。您应该看看SecurityDriven之类的库。

您应该使用System.Security。. net框架的加密命名空间。你可以在这里和这里找到两个可以使用的例子。

注意:首先,您必须使用FileStream或System.IO.File.ReadAllBytes读取文件AS BYTES[]的内容。你必须实现你的KEY——这意味着它是硬编码在你的应用程序中,可以使用反编译器找到!因此,要阻止用户读取数据几乎是不可能的。

正如Thomas所说,使用System.Security.Cryptography是加密数据的最佳方式。但是,您需要在客户端应用程序中包含加密密钥,并且任何访问此应用程序的人都可以很容易地提取密钥。

你最好不要浪费时间加密文件。