PHP用星号替换所有字符

时间:2014-09-22 07:34:25

标签: php

假设我有一个字符串形式的密码:

$password = "thisisaplaintextpassword"

如何将其转换为以下内容?

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

我想通过电子邮件向用户发送他们的帐户详细信息,并且不想发送整个内容。

4 个答案:

答案 0 :(得分:25)

使用str_repeat

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

答案 1 :(得分:6)

您不应该向用户显示长度,因为这是泄漏应该是安全的信息。

在你的问题下面的评论中使用的习惯用法是在问“你为什么要这样做?”更多的建议是“不要那样做”,但是苏格拉底的方法应该鼓励你思考为什么要问这个问题。你应该得出的结论是“你不应该问那个具体的问题,因为这个问题的基础是有缺陷的”。只需使用静态字符串。这是一个比实际告诉你如何在特定情况下做错事的更好的建议。

其次:向用户显示一系列反映密码长度的星号,这表示您将密码以明文形式存储或仅加密,以便您可以将其恢复为原始形式确定长度。这背叛了你的进一步缺乏安全性。除非有充分的理由不这样做,否则只应存储密码的哈希值。哈希是一个统一的长度,这使你的问题变得多余。

所以你 - 很简单 - 不应该这样做。 是你问的问题底线的答案。

然而,为了完整起见,我将在其他回复中重复你已经回答的问题:

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

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

答案 2 :(得分:0)

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

示例输入

testingpass

示例输出

***********

示例输入

hello

示例输出

*****

答案 3 :(得分:0)

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

echo hidePassword($p);