【问题标题】:Is there a way to create an enum-esque construct with elements that can be used as a function parameter?有没有办法使用可用作函数参数的元素创建枚举式构造?
【发布时间】:2018-02-06 06:04:15
【问题描述】:

关于这个问题的背景非常简短:我是一名计算机科学专业的学生,​​刚刚开始担任新的学徒软件开发人员职位。我主要使用 C#,我没有太多经验(我为类/项目编写的大部分内容都是用 Java 编写的),我的经理知道,所以我认为这不是问题只需问他或其他高级开发人员之一。但是,我想证明我能够自己解决一些问题,所以我想我会先在这里问。

基本上,我的任务是修改一个旨在加密和解密各种信息(如客户信息)的类。我的经理要求我修改程序,以便能够使用几个盐值之一来启动加密,每个盐值都是静态的,并且与给定的信息类别相关联。他建议我使用枚举器来包含盐值,然后我可以根据被加密信息的类型将其拉入加密和解密方法,这些信息作为字符串参数传递给这些方法。

我浏览了许多类似于this question 的线程,这些线程让我对如何创建一个类似枚举器的结构以包含多对字符串(关键是信息类型和该值是相关的盐)。但是,我不确定如何将这些值传递给类中的其他方法,因为我无法找到将它们作为参数直接传递给加密和解密方法的方法。我认为有一些乱七八糟的方法可能会奏效,但我想必须有一个更精致的解决方案,由于我对 c# 的相对缺乏经验,我不知道。

如果我可以提供任何其他信息,请告诉我。抱歉,如果这个问题很难理解,我多年来一直潜伏在 Stack Overflow 上,但这是我第一次发布问题,所以我可能没有清楚地表达我的问题。提前感谢您提供的任何帮助。

【问题讨论】:

  • 值的类型有哪些?您可以使用类似于Color 的模式并带有几个预定义的“常量”值吗?
  • 我需要提取的值是字符串。我会试一试您的建议并回复您 - 我看到一些人建议将其作为一种创建字符串类型枚举器的方法,但尚未尝试实施该特定方法。

标签: c#


【解决方案1】:

加密不使用盐。它使用键,可能还有随机填充。 Salt用于哈希,通常每次都应该不同,因此将它们存储在代码中没有意义。

加密密钥不会经常更改,但它们也应该能够更改(以防万一),因此将它们存储在代码中也没有意义。它们应该进入配置,或者如果它们是敏感密钥,它们应该进入安全密钥库。如果您没有安全的地方来存储它们,您可以使用DPAPI 对它们进行加密和解密。

一旦确定了它们的存储位置,就可以编写一些代码将它们读入Dictionary<enum, string> 或Dictionary<enum, byte[]>,然后使用它们。示例:

enum KeyType
{   
    Customer = 1,
    Administrator = 2,
    Application = 3
}

class Encryptor
{
    static readonly Dictionary<KeyType, string> keyLookup = new Dictinary<KeyType, string>();

    static public Encryptor()
    {
        keyLookup.Add(KeyType.Customer, GetCustomerCryptoKey());
        keyLookup.Add(KeyType.Administrator, GetAdminCryptoKey());
        keyLookup.Add(KeyType.Application, GetApplicationCryptoKey());
    }

    public string Encrypt(KeyType keyType, string input)
    {
        var key = keyLookup[keyType];
        return EncryptInternal(input, key);
    }
}

【讨论】:

  • 感谢您的意见,作为回应,我将尝试解释为什么这个请求也让我感到困惑。我对加密/密码学知之甚少,所以我必须通过一种关于使用盐创建散列值的速成课程(这就是这个类的目的,我可能滥用术语“加密”和“解密”) .根据我有限的理解,我花了一上午的时间编写代码来生成随机盐值,并与文本值组合以创建散列值。因此,当我的经理告诉我盐值应该保持不变时,我很困惑。
猜你喜欢
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 2011-10-30
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2016-10-04
相关资源
最近更新 更多