-1
我有這個簡單的類,其具有2種方法:固定鹽生成基於輸入的字符串 - C#
private static byte[] PBKDF2(string field, byte[] salt, int iterations, int outputBytes)
{
Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(field, salt);
pbkdf2.IterationCount = iterations;
return pbkdf2.GetBytes(outputBytes);
}
public static string CreateHash(string field, String salt)
{
//if (Array.TrueForAll(salt, x => x == 0))
//{
// RNGCryptoServiceProvider csprng = new RNGCryptoServiceProvider();
// csprng.GetBytes(salt);
// string s = Convert.ToBase64String(salt);
//}
byte[] salts = Encoding.ASCII.GetBytes(salt);
byte[] hash = PBKDF2(field, salts, PBKDF2_ITERATIONS, HASH_BYTE_SIZE);
return Convert.ToBase64String(hash);
}
我需要,其中用戶輸入了一個簡單的字符串,如「ABC」和我需要提供一個前端在此基礎上生成鹽。這是我要存儲在數據庫中的內容,並使用它傳遞給上述方法(CreateHash)以取消識別 數據。這個salt/key需要能夠解密,我必須在前端顯示。
我也可以使用其他類/庫。它不一定是Rfc2898DeriveBytes。
請給我提供一些關於如何實現這種鹽/密鑰生成功能的信息。這種鹽不能是一個隨機值。
謝謝!
鹽應該是隨機的,而不是根據用戶輸入。鹽的整個點是如果有人輸入相同的輸入兩次,你會得到兩個不同的輸出。如果你這樣做是因爲當你去驗證'byte []'的時候你需要「知道salt」,那麼你只需在鹽塊的前面或後面添加或附加salt,當你去請確認您拉出鹽並將其送入PBKDF2功能。 –
可能的[解決方案](https://social.msdn.microsoft.com/Forums/vstudio/en-US/d6a2836a-d587-4068-8630-94f4fb2a2aeb/encrypt-and-decrypt-a-string-in-c?論壇= csharpgeneral),但它使用Rfc2898 ...你爲什麼不想使用它? –
@ScottChamberlain我明白,鹽應該是動態的,但這裏的要求是不同的。這不適用於密碼存儲。我們需要取消識別數據並將它們存儲在文件中。每次文件附帶一些數據時,我們都會加密並生成另一個文件。所有的個人信息都被取消標識。但是,例如,對於給定字段名稱David,它始終需要轉換爲與之前生成的字符串相同的加密字符串。它不是由我定義的!如果我修復了salt&pass到Rfc2898DeriveBytes以獲取相同輸入的相同字符串。 – vrkala