2017-08-28 53 views
-1

关于这个问题的非常简短的背景:我是CS学生,刚刚开始了一个新的学徒软件开发者职位。我主要使用的是C#,但我没有太多经验(我为类/项目编写的大部分内容都是用Java编写的),我的经理知道这一点,所以我认为这不会是一个问题。只要问他或其他高级开发人员。然而,我想证明我能够自己弄清楚一些事情,所以我想我会先在这里问。有没有办法创建一个可以用作函数参数的元素的enum-esque构造?

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

我浏览过一些类似的线程来这给了我如何去创造一个枚举状结构包含了一些对字符串的(与键为信息类型和一个体面的想法this question价值是相关的盐)。然而,我不知道如何将这些值传递给类中的其他方法,因为我无法找到直接将它们作为参数传递给加密和解密方法的方法。我认为可能会有一些混乱的方法,但我想我必须有一个更精致的解决方案,但我并不知道这是因为我对c#的相对缺乏经验。

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

+1

10这些值的类型是什么?您可以使用与['Color]类似的模式(https://msdn.microsoft.com/en-us/library/system.drawing.color.aspx)和几个预定义的“常量”值吗? –

+0

我需要拉的值是字符串。我会给你一个建议一个镜头,然后回复你 - 我看到一些人建议,作为创建一种字符串型枚举器的手段,但还没有试图实现这种特定的方法。 – Nick

回答

0

加密不使用盐。它使用键和可能的随机填充。盐是用于散列的,并且一般而言应该每次都有所不同,因此将它们存储在代码中是没有意义的。

加密密钥不会经常更改,但它们也应该能够被更改(如果妥协),因此将它们存储在代码中也是没有意义的。他们应该进入配置,或者如果他们是敏感的密钥,他们应该进入一个安全的密钥存储。如果您没有安全的地方存放它们,您可以使用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); 
    } 
} 
+0

感谢您的意见,作为回应,我会尽力解释为什么这个要求也让我困惑。我对加密/加密技术知之甚少,所以我不得不通过一种关于使用salt创建散列值的速成班(这是这个班打算做的事,我可能会滥用术语“加密”和“解密”) 。基于我对有限理解的理解,我花了早上编写代码来生成随机盐值,以便与文本值结合以创建哈希值。因此,当我的经理告诉我盐的价值应该保持不变时,我感到非常困惑。 – Nick

相关问题