将一个字符串密码转换为所有星号



我想加密密码时,它显示在注册报告中,而不是显示真实的密码,我想加密所有的值星号(*)我试图将所有字符逐一替换为星号*,但我认为这不是正确的方式来实现结果。

String s1="mypassword";  
String replaceString=s1.replaceAll("a","*");
replaceString=s1.replaceAll("b","*");
replaceString=s1.replaceAll("c","*");
replaceString=s1.replaceAll("d","*");
replaceString=s1.replaceAll("e","*");
replaceString=s1.replaceAll("f","*");
replaceString=s1.replaceAll("g","*");
replaceString=s1.replaceAll("h","*");
replaceString=s1.replaceAll("i","*");
replaceString=s1.replaceAll("j","*");
replaceString=s1.replaceAll("k","*");
replaceString=s1.replaceAll("l","*");
replaceString=s1.replaceAll("m","*");
replaceString=s1.replaceAll("n","*");
replaceString=s1.replaceAll("o","*");
replaceString=s1.replaceAll("p","*");
replaceString=s1.replaceAll("q","*");
replaceString=s1.replaceAll("r","*");
replaceString=s1.replaceAll("s","*");
replaceString=s1.replaceAll("t","*");
replaceString=s1.replaceAll("u","*");
replaceString=s1.replaceAll("v","*");
replaceString=s1.replaceAll("w","*");
replaceString=s1.replaceAll("x","*");
replaceString=s1.replaceAll("y","*");
replaceString=s1.replaceAll("z","*");
replaceString=s1.replaceAll("A","*");
replaceString=s1.replaceAll("B","*");
replaceString=s1.replaceAll("C","*");
replaceString=s1.replaceAll("D","*");
replaceString=s1.replaceAll("E","*");
replaceString=s1.replaceAll("F","*");
replaceString=s1.replaceAll("G","*");
replaceString=s1.replaceAll("H","*");
replaceString=s1.replaceAll("I","*");
replaceString=s1.replaceAll("J","*");
replaceString=s1.replaceAll("K","*");
replaceString=s1.replaceAll("L","*");
replaceString=s1.replaceAll("M","*");
replaceString=s1.replaceAll("N","*");
replaceString=s1.replaceAll("O","*");
replaceString=s1.replaceAll("P","*");
replaceString=s1.replaceAll("Q","*");
replaceString=s1.replaceAll("R","*");
replaceString=s1.replaceAll("S","*");
replaceString=s1.replaceAll("T","*");
replaceString=s1.replaceAll("U","*");
replaceString=s1.replaceAll("V","*");
replaceString=s1.replaceAll("W","*");
replaceString=s1.replaceAll("X","*");
replaceString=s1.replaceAll("Y","*");
replaceString=s1.replaceAll("Z","*");
replaceString=s1.replaceAll("0","*");
replaceString=s1.replaceAll("1","*");
replaceString=s1.replaceAll("2","*");
replaceString=s1.replaceAll("3","*");
replaceString=s1.replaceAll("4","*");
replaceString=s1.replaceAll("5","*");
replaceString=s1.replaceAll("6","*");
replaceString=s1.replaceAll("7","*");
replaceString=s1.replaceAll("8","*");
replaceString=s1.replaceAll("9","*");
System.out.println(replaceString); 

如果s1只包含密码,您会想要屏蔽所有字符,并且您最终会得到相同长度的字符串,完全由星号组成。这可以直接构造:

replaceString = "*".repeat(s1.length());

或者,不显示任何关于密码的信息。密码是你想要提供尽可能少的信息的东西,因为信息可以使它(稍微或实质上)更容易猜测/破解。

你可以用固定数量的恒星来展示某物;但我认为这并没有显示任何有用的东西,除了"这个用户一个密码",这对所有用户来说应该是一样的。

把它删掉,用报告里的空地方写一些能给读者提供信息的东西。

如果您想用所有星号替换String,您可以尝试如下操作;

String s1="mypassword";  
String replaceString="*";
replaceString = replaceString.repeat(s1.length());
String s1="mypassword";  
String pass = s1.replaceAll("[\W\w]","*")

根据代码,您可以在前端或后端发送静态值*******或在最坏的情况下,您可以使用正则表达式replaceAll来匹配所有可能的不同密码。

安全性问题已经提出来了,所以我只关注实际的"任务"。这里。

有多种方法可以做到这一点。其中一个我可能会选择的是:

如前所述,您可以创建一个与密码字符串长度相同的新字符串,但仅用星号填充它,而不是替换它们。这几乎是每个人都已经建议过的,但我尽量保持简单,因为看起来你更像是初学者。
// We start off with an empty new String
String newString = "";
// Then we create a loop that adds a asterisk to the new String exactly, this is called x times where x is the length of the original passwordString
for (int i = 0; i < oldString.length; i++) { // This is a normal for-loop, if you don't know this concept yet, just google 'for-loop java'
newString = newString + "*"; // Here we set the newString to itself-i.e. the current content of the String plus an asterisk.
}

循环之后,我们得到了一个新的String对象,它的字符数与旧的String对象相同,但都是星号。现在我们可以用新字符串的内容替换旧字符串,如果这是你想要做的。

oldString = newString;

最新更新