如何驗證連續字符串/ int當我想更改新密碼? 例如:舊密碼驗證連續(連續)新密碼
old pass: mypassword1
new pass: mypassword2
那麼它將返回false,但如果是這樣的
old pass: mypassword1
new pass: mypassword3
那麼它將返回true。
我試過只有新密碼的regEx方法。
在此先感謝。
如何驗證連續字符串/ int當我想更改新密碼? 例如:舊密碼驗證連續(連續)新密碼
old pass: mypassword1
new pass: mypassword2
那麼它將返回false,但如果是這樣的
old pass: mypassword1
new pass: mypassword3
那麼它將返回true。
我試過只有新密碼的regEx方法。
在此先感謝。
嘗試這種情況:
<?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);
?>
由於您正在處理密碼,因此您應該無法與以前的密碼進行比較(應該安全地對其進行散列處理,因此不可逆轉)。 PHP在主題in the documentation上有一些優秀的閱讀材料。
作爲一種替代方案,您可以生成密碼的變體,該密碼可能會破壞您的驗證規則,然後查看這些變體是否匹配。
讓我們假設你正在使用的密碼功能:
$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
爲真,那麼密碼傷了你的驗證規則。
這是不是一個傻瓜證明的方法。它只是和您生成無效密碼變體的能力一樣好。
我需要這個用於更改密碼模塊。它需要從html表單輸入舊密碼和新密碼。表單將新舊數據發佈到函數,而不是一些散列密碼。所以,這不是我正在尋找的。無論如何感謝您的答案。 :) –
'如果(end_number_of_previous + 1 == end_number_of_current){返回false; } else {return true;}'。請告訴我們你已經嘗試了什麼,以便我們可以幫助解決特定問題... – FirstOne
@FirstOne我試過regEx,但它只適用於新密碼。你有沒有嘗試過比較舊的和新的密碼與regEx? :) –
密碼的連續部分是否始終是添加到密碼末尾的數字? –