2012-04-25 80 views
7

試圖找出這是在SQL數據庫中的什麼樣的散列/加密。我們想要創建一個應用程序來執行密碼重置,但是我無法在我的生活中找到它們如何生成此值。這是什麼樣的密碼哈希/加密?

這裏有多個實例

{enc:1}gdyb21LQTcIANtvYMT7QVQ== 
{enc:1}ZEImYhrd/Ot/LcewJCFdMw== 
{enc:1}+IOSBzegAx7nSytO1J3GEw== 
{enc:1}6ULa1IFMxavY7SE66K3UDg== 
{enc:1}UEFeGim2M8d0Iee7ejFRUw== 
{enc:1}RjqL5rXOBpqJAKPjYkwLtw== 
{enc:1}V/PEslecyYxFki03H4ctAQ== 
{enc:1}VDEm9QmD+L7tsqcPz/S9XQ== 
{enc:1}YkQuEPpL6dRfDLwKMEVMMg== 
{enc:1}86rG96EP7T3tx9e8C7513g== 
{enc:1}xvSwvsmkgwtXwVISvg7mJQ== 
{enc:1}KjCF0RD4tcUGEP4Bpafw5A== 
{enc:1}z9pGrdm4QAoomrFCJCXQIQ== 
{enc:1}yhLv0HeW90FENKJjV9Nb+g== 
{enc:1}EtYMl5FOW+zdpVvWsIj3Rw== 
+2

尾隨的'=='是base64編碼的一個缺陷。 – 2012-04-25 13:19:53

+0

我同意,和22的長度意味着它是一個16位的散列,大概MD5因爲這通常用於密碼。所以它可能是一個base64編碼的,無損的MD5哈希。 – Ben 2012-04-25 13:26:45

回答

10

讓我們把它拆開:

{enc:1}gdyb21LQTcIANtvYMT7QVQ== 

{enc:1}部分很可能是某種形式的版本。這是相當常見的,因此您可以隨時升級您使用的任何散列/加密算法。每個值標識用於產生哈希算法 - 如果實現決定使用一種不同的方法,它會知道驗證使用第一版本的密碼,但隨後可能取代{enc:1}{enc:2}也好,都與新一起散列形式。

其餘部分是BASE64 - 這是在==,這意味着原始值是16個字節結束24個字符。

所以這是某種形式的16字節(128位)的散列,使用版本的前綴。這幾乎可以告訴我們......它可能是任何 128位散列,或者可能是128位長散列(儘管你不得不想知道爲什麼他們在那一點扔掉了數據)。

你可以進行進一步的測試,如果你可以用密碼創建自己的用戶。例如,具有相同密碼的兩個用戶最終會使用相同的散列嗎?如果不是這樣,如果從密碼X密碼Ÿ改變,然後再返回到密碼X爲單個用戶,確實是得到到相同的哈希? (數值中沒有明顯的鹽分,儘管用戶名可以用作鹽)。

+1

就是這樣,用戶名是鹽。感謝您快速回復引發我瘋狂的問題!我用這個網站來確認http://www.insidepro.com/hashes.php?lang=eng – 2012-04-25 13:34:01