2017-04-12 61 views
-1

我有一個使用未知哈希方法存儲密碼的軟件。例如,如果將123456789設置爲密碼,它將通過兩個「鹽」字段(似乎鹽是隨機生成的)和「哈希」存儲在數據庫中。而且我需要知道軟件如何達到那個散列字符串。如何檢測哈希字符串的算法

作爲origial字符串一個例子:123456789

所述鹽是:ifWIg1IB

散列是:QkKtpxSqd + kIH2EuMkNdWV44B2g =

我需要知道,因爲通過使集成登錄系統的其這散列密碼。我認爲避免在辦公室爲每個人提供大量的用戶名和密碼是非常重要的。

與最好的方面

+0

不整點密碼安全的,以防止你逆向工程呢? – buffjape

+0

您將原始字符串的字節取出,然後以某種方式將它們與鹽的字節組合(取決於算法)。然後您對結果應用一次或多次散列函數。 –

+0

@buffjape:我不認爲OP想知道原始密碼(因爲這是流行的哈希算法(接近)不可能),但想知道算法。但事實上,雖然混淆不夠安全,但這是人們可以採取的額外措施之一。 –

回答

1

你的'散列'輸出是一個base-64編碼的字符串。解碼字符串會產生一個20字節的摘要。 SHA-1產生20字節的哈希所以它看起來像的生成過程是:

base64(sha1(combine(salt, password))) 

有兩個明顯的方法來組合所述鹽和密碼明文 - 追加或預先準備鹽的密碼。如果你在前面加上你結束了以下算法,鹽生成編碼摘要:

public static string GenPasswordString(string password, string salt) 
{ 
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(salt + password); 
    using (var alg = new System.Security.Cryptography.SHA1Managed()) 
    { 
     byte[] hashBytes = alg.ComputeHash(bytes); 
     return Convert.ToBase64String(hashBytes); 
    } 
} 

GenPasswordString("123456789", "ifWIg1IB") == "QkKtpxSqd+kIH2EuMkNdWV44B2g=" 
+0

上帝保佑你。有用。 – VictoryMarch