Php 顺序(连续)新密码与旧密码验证
当我想更改新密码时,如何验证顺序字符串/int? 例如:Php 顺序(连续)新密码与旧密码验证,php,Php,当我想更改新密码时,如何验证顺序字符串/int? 例如: old pass: mypassword1 new pass: mypassword2 然后它将返回false,但如果是这样的话 old pass: mypassword1 new pass: mypassword3 然后它将返回真值 我只为新密码尝试了regEx方法 提前感谢。因为您正在处理密码,所以您不应该能够与以前的密码进行比较(它应该被安全地散列,因此不可逆)。PHP有一些关于这个主题的优秀阅读材料 作为替代方案,您可以生成已
old pass: mypassword1
new pass: mypassword2
然后它将返回false,但如果是这样的话
old pass: mypassword1
new pass: mypassword3
然后它将返回真值
我只为新密码尝试了regEx方法
提前感谢。因为您正在处理密码,所以您不应该能够与以前的密码进行比较(它应该被安全地散列,因此不可逆)。PHP有一些关于这个主题的优秀阅读材料 作为替代方案,您可以生成已知密码的变体,以破坏验证规则,然后查看这些变体是否匹配 假设您正在使用密码功能:
$hash = password_hash($password, PASSWORD_DEFAULT);
// AND....
password_verify($password, $hash);
变化可能如下所示:
$pwd = 'word1';
$num = substr($pwd,-1);
$invalid = false;
$phrase = substr($pwd, 0, -1);
foreach([$num++, $num--] as $variation) {
if(password_verify($phrase.$variation, $hash)) {
// password matches, the user is just incrementing the digit.
$invalid = true;
}
}
因此,如果$invalid
为真,则密码将违反您的验证规则
这不是一个简单的方法。它只与您生成无效密码变体的能力相同。尝试以下方法:
<?php
$oldpass = 'mypassword1';
$newpass = 'mypassword2';
preg_match('/^([^\d]+)([\d]*?)$/', $oldpass, $match);
$string = $match[1];
$number = $match[2] + 1;
$string .= $number;
$valid = $newpass === $string ? false : true;
var_dump($valid);
?>
If(end\u number\u of_previous+1==end\u number\u of_current){return false;}否则{return true;}
。请告诉我们您尝试了什么,以便我们可以帮助解决具体问题…@FirstOne我尝试了regEx,但它仅用于新密码。您是否尝试过将新旧密码与正则表达式进行比较?:)密码的顺序部分是否总是添加到密码末尾的数字?您可以共享Regex代码吗???@Dinidu是的,大多数情况下,更改密码模块都需要此代码。它需要从html表单中输入旧密码和新密码。表单将新旧数据发布到函数中,而不是一些散列密码。所以,这不是我想要的。无论如何,谢谢你的回答。:)