2017-08-28 58 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

相關問題