【问题标题】:How should I store sensitive data for use by my application in VB.net?我应该如何存储敏感数据以供我的应用程序在 VB.net 中使用?
【发布时间】:2014-07-02 16:05:30
【问题描述】:

我遇到的一个问题是试图找到一种方法来安全地存储某些信息。我仍在学习和试验 .NET 作为入门语言和 C 语言。所以如果我缺乏基本逻辑,请耐心等待。

要求

目前我正在使用我的应用程序设置中的“设置”存储来存储几条信息,其中包括:

  • SQL 连接字符串(带有凭据)
  • SMTP 服务器设置(带有凭据)
  • 其他各种敏感字符串,其中包含我不希望有人找到的信息(至少在没有相当大的努力的情况下不会)

我一直在使用“设置”商店,因为坦率地说,在一个中心位置更改值并反映在我的代码中会更容易。

我当然意识到我可以很容易地创建一个共享类并将其用作所有这些设置的参考。

我需要做到这一点,这样人们就不能只使用 .NET 反射器并获取所有这些信息。 - 在使用 SmartAssemply 进行试验后,became quickly apparent 发现“设置”容器在混淆过程中被忽略了。

前进的道路?

所以我做了一些研究,目前我面临着我认为主要可能的前进方向。 (记住这是我有限的经验)

  1. 创建一个新的共享类,让 SmartAssembly 使用它的混淆方法隐藏字符串。
  2. 创建一个 INI/XML 文件以放置在主应用程序旁边(外部)。这将被加密并在应用程序需要引用任何包含的设置或字符串时被解密。 (虽然我想得越多,我认为它似乎越有缺陷)
  3. 创建一个新的共享类并试验SecureString 类? (PoC 将不胜感激)
  4. 你的想法?

示例

假设我试图隐藏以下字符串。

Dim ConnStr As String = "server=100.100.100.1;user=admin;database=database2;port=3306;password=password123"

如果提供答案的用户能够连同他们的建议一起提供一个小型 PoC,说明我如何保护上述字符串以及如何在我的程序中引用它(如果您倾向于例如加密)。

【问题讨论】:

    标签: vb.net string encryption obfuscation securestring


    【解决方案1】:

    二进制序列化将呈现日期和整数之类的内容,因此它们不容易被读取,但对于字符串则不然。 NET BinaryFormatter 甚至会使用属性名称作为键,导致类似

    "SecretEmail" / "Sam@somewhere.com"
    "ExpiryDate" / <binary>
    

    我非常喜欢 ProtoBuff-NET 的灵活性。它是标准 NET BinaryFormatter 的替代品,并为此提供了一个简单的选项:

    <ProtoBeforeSerialization>
    Private Sub Encryptor()
        _foo = Crypto.Encrypt(_foo)
        _bar = Crypto.Encrypt(_bar)
        _secret = Crypto.Encrypt(_secret)
    End Sub
    
    <ProtoAfterDeSerialization>
    Private Sub Decryptor()
        _foo = Crypto.Decrypt(_foo)
        _bar = Crypto.Decrypt(_bar)
        _secret = Crypto.Decrypt(_secret)
    End Sub
    

    字符串数据在应用程序运行时是明文,但在保存时是加密的(这可能不是您想要的)。此外,它使用整数值代替输出中的属性名称。

    就在数据被序列化之前,您可以加密或简单地打乱字符串,以便它们只有在加载到应用程序时才可读。同样,&lt;ProtoAfterDeSerialization&gt; 将允许您撤消您所做的任何事情。任何具有默认值 (Private _foo As String = "bar") 的支持字段可能/应该由您的工具处理。

    还有其他选项,这个选项的优点是在可用于保存文件的序列化机制中为其提供了挂钩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-22
      • 2016-09-28
      • 1970-01-01
      • 2019-07-30
      • 2019-01-11
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多