2013-01-14 178 views
3

我在我的web應用程序(Symfony2與FOSUserBundle)上創建了一個帳戶,並使用密碼「lolwut」(不帶引號)進行了註冊。Symfony2(FOSUserBundle)SHA512哈希不匹配C#SHA512哈希

這些人是我security.yml配置的設置:

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: 
      algorithm: sha512 
      iterations: 1 
      encode_as_base64: false 

得到的數據:

Hashed password: 
f57470574dbf29026821519b19539d1c2237e4315d881fa412da978af554740c6b284062a9a4af7d0295d18ebea8ef2e152cf674b283f792fe0b568a93f969cf 
Salt: 
kuc5bixg5u88s4k8ggss4osoksko0g8 

現在,由於迭代1集,我假設編碼「lolwut 「在C#中的SHA512將給我同樣的結果,這是我的邏輯:

string salt = "kuc5bixg5u88s4k8ggss4osoksko0g8"; 
string input = "lolwut"; 
string passAndSalt = String.Concat(input, salt); 

System.String Hashed = System.BitConverter.ToString(((System.Security.Cryptography.SHA512)new System.Security.Cryptography.SHA512Managed()).ComputeHash(System.Text.Encoding.ASCII.GetBytes(passAndSalt))).Replace("-", ""); 
return passAndSalt + "<br>" + Hashed; 

但是,這返回th E採用值不匹配FOSUserBundle哈希密碼都:

82E8CA0408B23DB50EB654EDB50A7926AC73613184054DB82FB6D67CD4186B7A045D265AEDE6E3852CD85B981F15F6615C1C0C6FBF443B1672DF59DE23557BD9 

我知道我必須在某個地方做錯了什麼,但我不能爲我的生活弄清楚它是什麼,它的使我抓狂。有誰能幫我出來嗎?

+0

我認爲C#是基地64編碼密碼,但我可能是錯 – JamesHalsall

+1

爲什麼你完全合格的所有你的類型名稱?它使代碼更難以閱讀 - 就像把它全部放在一個聲明中一樣...... –

+0

@JonSkeet這是因爲它不是我自己的代碼,我從示例中複製它以檢查它是否實際工作。你是對的,但它是不可讀的,一旦我有這個問題分類,將被清理。 :) – thomastuts

回答

3

Symfony的合併密碼和鹽password{salt},所以這段代碼將返回相同的哈希:

string salt = "kuc5bixg5u88s4k8ggss4osoksko0g8"; 
    string input = "lolwut"; 
    string passAndSalt = String.Format("{0}{{{1}}}", input, salt); 

    System.String Hashed = System.BitConverter.ToString(((System.Security.Cryptography.SHA512)new System.Security.Cryptography.SHA512Managed()).ComputeHash(System.Text.Encoding.ASCII.GetBytes(passAndSalt))).Replace("-", ""); 
    // Hashed.ToLower() 
+0

非常感謝,這就是訣竅! C#將它作爲大寫字符串返回,所以我沒有'返回Hashed.ToLower()'來完美匹配它們。 – thomastuts