2012-04-30 73 views
2

如何在我的用戶表中散列管理員密碼?如何在我的用戶表中散列管理員密碼?

使用SQL Server 2008 R2

我知道有一個加密命令被內置到PHP,但我不知道這是否使用SQL查詢是可能的。

例:表叫用戶,管理員進入,密碼爲sha1('password')

+0

你在哪裏看到「管理員密碼」(也許你可以更具體)保存爲純文本?您是在談論您的應用程序用於連接到SQL Server的連接字符串中使用的密碼? –

+0

不,不,不,我說的是我有一張桌子,叫做用戶,我希望爲桌子做一個管理員帳戶。 –

+1

您通常不會對密碼進行加密,而是對其進行哈希處理(即使用像SHA這樣不可逆的功能,但可以驗證密碼是否正確)。 –

回答

0

使用HASHBYTES並指定SHA1的算法。例如:

SELECT HASHBYTES('SHA1', @password); 

編輯:作爲溼婆在評論中說,雖然,你應該有不同的存儲你的密碼,並至少醃製他們。

在這裏看到:Preferred Method of Storing Passwords In Database

+0

如果程序在某個時候可能從內部到外部,我應該使用SHA256嗎? –

+0

嗯,我知道我應該將它們存儲爲數據庫中的散列,這就是爲什麼我要問如何使用SQL散列通過。我也知道我應該使用鹽,但我不太清楚我完全理解它們,他們只是另一個加密碼的散列通行證嗎?有人可以舉一個例子說明他們如何使用PHP處理鹽類? –

+0

我會去SHA256是的,僅僅是額外的安全,你可以使用'hash'功能在PHP中使用SHA256 http://php.net/manual/en/function.hash.php – mattytommo

0

有加密和散列之間的差異。加密通常使用密碼翻譯純文本,並且可以反轉爲原始輸入,如果散列不能反轉爲原始輸入。

爲您查詢,您應該使用HASHBYTES功能:

DECLARE @YourInput nvarchar(4000); 
SELECT @YourInput = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf'); 
SELECT HASHBYTES('SHA1', @YourInput); 

如果您使用SQL Server 2012中,你可以使用:

SELECT HASHBYTES('SHA_256', @YourInput); // SHA 256 or SHA_512 

http://msdn.microsoft.com/en-us/library/ms174415.aspx

+0

所以,如果我是在SQL散列密碼的一個用戶,我仍然可以用它來登錄系統,對不對?我只需要通過從PHP的密碼散列SQL? –

+0

@Event_Horizo​​n - 你應該每個人存儲密碼的哈希,而不僅僅是管理員。這是從安全角度來看,更好,也將減少需要爲您的登錄系統的邏輯。 –

1

注意,沒有任何的以上都是很好的方式存儲密碼哈希值。多次使用PBKDF2(PKCS#5,RFC2898)對密碼進行加密密碼(OWASP建議2012年64,000次,每2年翻一次)。理想情況下,將它哈希爲可變的次數,並與隨機的每用戶鹽一起存儲。

更好的是,將建議的密碼與已知的錯誤密碼列表進行反彈,理想情況下已經應用了基本的破解規則(1337講解翻譯),因此不允許使用「P @ $$ w0rd」。

見OWASP密碼存儲小抄:https://www.owasp.org/index.php?title=Password_Storage_Cheat_Sheet&setlang=es