如何在VB.Net?

时间:2016-09-12 16:59:25

标签: vb.net encryption

让我们说我有一个用VB.Net编写的程序,加密代码依赖于设置加密和解密的密钥。如何将密钥安全地存储在程序中?如果它是代码中的纯文本,则可以进行逆向工程。如果它是一个设置,那么它将作为纯文本存储在x.exe.config文件中,甚至更容易找到。

x.exe.config文件可以设置为encypt吗?如果没有,那么将密钥硬编码到程序中最安全的方法是什么?

我使用的方法是使用不同的方法加密,然后对其进行编码(因为它是非ascii文本)并将其存储在设置中,但如果程序可以对其进行解码是逆向工程。

其他人在这种情况下做了什么?

1 个答案:

答案 0 :(得分:0)

你已经完成了一项不可能完成的任务。问题是,通过将密钥硬编码到程序中,正如您所指出的,用户仍然可以通过逆向工程获取密钥。如果你把它放在某个地方的文件中,程序需要能够读取它,因此用户也可以以相同的方式访问它。

您遇到的根本问题是软件需要访问密钥,为此,密钥必须存储在用户可以访问的某个位置。它可以在二进制文件或计算机中,但可以分析二进制文件并检查文件系统。加密文件可以保护密钥,但只需使用新密钥重新创建问题。

这也是所有DRM计划面临的同样问题。它们允许用户访问完整的软件,但希望以某种方式限制它,但是用户在他的计算机中拥有运行该软件的所有内容。这就是为什么如果付出足够的努力,它总是可以盗用每个桌面软件。你只能通过混淆密钥来使它变得更加困难。

但你能做什么呢?

另一种方法是让用户根本没有DB凭据。或者让它们对任何有意义的东西都没用。我可以在这里想到两种方法:

  • 让系统与Web服务进行通信,而不是直接与DB进行通信。这样,用户只知道服务器的地址,并且WS可以在转到数据库之前根据需要请求任何身份验证。那时WS是唯一一个触摸数据库的人。这是所有网站在实践中所做的事情,访问者永远不会看到数据库,但通过网络服务器与它进行交互。
  • 另一种选择是为用户提供直接的数据库访问权限,但这些凭据仅授予调用某些存储过程(或没有敏感数据的访问视图)的权限,而这些权限又会在继续之前请求某种身份验证。这样,只要其权限保持在最低限度,并且在继续之前正确验证了特权操作,数据库凭证就不会那么敏感。