2014-09-22 78 views
8

所以可以說我有一個字符串形式的密碼替換所有字符:PHP有星號的

$password = "thisisaplaintextpassword" 

我怎樣才能把它變成下面?

$password = "************************" 

我想通過電子郵件向用戶發送他們的帳戶詳細信息,而不想發送整個事情。

+0

',不希望將整個thing.' ..那爲什麼你要發送密碼,如果不需要? – Jenz 2014-09-22 07:36:12

+0

@u_mulder密碼長度各異 – ThatGuy343 2014-09-22 07:36:39

+4

如果沒人能看到它 - 1.爲什麼要發送它? 2.誰在乎它的長度? – 2014-09-22 07:37:19

回答

21

使用str_repeat

$password = str_repeat("*", strlen($password)); 
+0

將標記爲答案,當SO讓我 – ThatGuy343 2014-09-22 07:43:02

0
$password = "thisisaplaintextpassword" 
echo str_repeat("*",strlen($password)); 

採樣輸入

testingpass 

樣本輸出

*********** 

採樣輸入

hello 

樣本輸出

***** 
0
function hidePassword($p) { 
    $fit = strlen($p); 
    return sprintf("%'*-${fit}s",false); 
} 

echo hidePassword($p); 
6

你真不該顯示長度給用戶,因爲這是應該是安全的信息泄漏。

在您的問題下面的評論中使用的蘇格拉底方法在問「爲什麼要這麼做?」更多的建議是「不要那樣做」,但是蘇格拉底方法應該鼓勵你思考爲什麼要問這個問題。你應該畫的結論是「你不應該問這個具體問題,因爲這個問題的基礎是有缺陷的」。只需使用一個靜態字符串。這是更好的建議,而不是告訴你如何做一些在特定情況下做錯事情的事情。其次:要向用戶顯示反映其密碼長度的星號序列,這表明您正在以明文形式存儲其密碼,或者僅對其進行加密,以便您可以將其密碼恢復爲其原始形式確定長度。這顯示了你的安全問題。除非有一個非常好的理由,否則只能存儲密碼散列。哈希是統一的長度,所以這使得你的問題變得多餘。

所以你 - 很簡單 - 不應該這樣做。 是你要問的問題底線的答案。

但是爲了完整起見,我會重複你已經在其他反應了答案:

function stringToAsterisks($string){ 
    return str_repeat("*", strlen($string)); 
} 

http://php.net/manual/en/function.str-repeat.php

+0

我看到了,謝謝你的洞察力。這是我第一次建立一個賬戶系統。 – ThatGuy343 2014-09-22 07:51:33

+1

沒有probs:我們都從某個地方開始,其中一些東西第一次不是很明顯。我能否建議你不要自己發明整個事情,而是要閱讀如何最好地處理這類事情,尤其是在保護人員數據方面。 – 2014-09-22 08:00:50