2011-07-11 50 views
5

我已經做了充足的google搜索和諸如此類的東西,並不能找到完全是我正在尋找...PHP - 分手字到數組

我正在收緊認證爲我的網站。我決定採取用戶的憑據,並哈希/鹹他們。然後將這些值存儲在數據庫和用戶Cookie中。我修改了一個我在PHP網站上找到的腳本,目前效果很好。然而,我注意到使用array_rand時,它會依次從預定義的字符串中選擇字符。我不喜歡這個,所以我決定在array_rand的數組上使用一個shuffle。工作很好。

接下來!我認爲將我的用戶輸入的密碼變成一個數組,然後將其與我的鹽漬數組合並將是聰明的!好吧,我無法將我的用戶密碼轉換爲數組。我希望密碼中的每個字符都是數組條目。 IE瀏覽器,如果你的密碼是「酷」,數組將是,數組0 => C 1 => O 2 => O 3 => L等等我試過詞分裂字符串然後爆炸它與指定的中斷字符,沒有工作。我想我可以用for循環,strlen和whatnot做一些事情,但是那裏有一個更優雅的方式。

有什麼建議嗎?我種難倒:(以下是我到目前爲止,我不是這個做,因爲我還沒有進一步的進展比explodey一部分。

$strings = wordwrap($string, 1, "|"); 
echo $strings . "<br />"; 
$stringe = explode("|", $strings, 1); 
print_r($stringe); 
echo "<br />"; 
echo "This is the exploded password string, for mixing with salt.<hr />"; 

太謝謝你了:)

回答

14

你想要的PHP函數str_split

str_split('cool', 1); 

而且它會返回,作爲上述

[0] => c 
[1] => o 
[2] => o 
[3] => l 
+0

這工作完美!非常感謝Colum!總是要學習:)發送好(((振動)))你的方式! – Shawn

+1

總是有一些新的學習 – Colum

+0

傢伙也不使用'爆炸'它不能使用空分界:)只是覺得提及 –

2

釷如果你將字符串視爲一個數組,php會鬆散地輸入,php會按你所期望的那樣做。例如:

$string = 'cool'; 
echo $string[1]; // output's 'o'. 
+1

這不涉及鬆散打字,它只是被稱爲子串訪問,並且是**不**被誤認爲是數組。 – hakre

+0

嘿批量,謝謝你的信息。我已經探索過,但實際上卻試圖將array拆分爲一個實際的array_rand數組,但效果並不理想。當然,除非array_rand可以把一個字符串視爲一個數組......我只是認爲它不會。謝謝你的信息不管:) – Shawn

+0

對不起,我希望我可以編輯,我的意思是array_merge。 Urf – Shawn

3

從來沒有,EVER實現密碼學算法,除非你真的知道你在做什麼(或在這種情況下,設計了!)。如果你決定繼續做,無論如何,你會把你的網站置於危險之中。 沒有理由你應該這樣做:確實有很多庫和/或函數可以完成所有這些事情。

+0

嘿,謝謝你的擡頭。我最終將使用MD5來散列混合的鹽/密碼。該計劃最終要創建一個salt,將密碼,md5 salt,md5密碼混合在一起,然後將每個哈希值放在一起並對該字符串進行哈希處理,然後將其用作DB憑據/ cookie憑據。我希望這可以防止用普通密碼和/或用戶名對用戶進行彩虹表攻擊。這是我的最終希望,我可以實施ssl/tls來保護cookie的細節傳輸,以防止MITM。這聽起來不錯嗎?謝謝:) – Shawn

+0

MD5已經過時了,但SSL/TLS肯定會訣竅:) – AlexWebr

+0

我聽說MD5真的很值得推薦,因爲它越來越受到威脅。我聽說過SHA1的一樣。你會推薦SHA256嗎? MD5的唯一固有弱點是用戶輸入本身的弱點嗎?這就是我計劃使用30字符鹽的原因。儘管如此,我無論如何也不是大師。永遠學習! – Shawn