2015-12-27 35 views
-1

如何驗證連續字符串/ int當我想更改新密碼? 例如:舊密碼驗證連續(連續)新密碼

old pass: mypassword1 
new pass: mypassword2 

那麼它將返回false,但如果是這樣的

old pass: mypassword1 
new pass: mypassword3 

那麼它將返回true。

我試過只有新密碼的regEx方法。

在此先感謝。

+0

'如果(end_number_of_previous + 1 == end_number_of_current){返回false; } else {return true;}'。請告訴我們你已經嘗試了什麼,以便我們可以幫助解決特定問題... – FirstOne

+0

@FirstOne我試過regEx,但它只適用於新密碼。你有沒有嘗試過比較舊的和新的密碼與regEx? :) –

+0

密碼的連續部分是否始終是添加到密碼末尾的數字? –

回答

1

嘗試這種情況:

<?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); 
?> 
1

由於您正在處理密碼,因此您應該無法與以前的密碼進行比較(應該安全地對其進行散列處理,因此不可逆轉)。 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爲真,那麼密碼傷了你的驗證規則。

這是不是一個傻瓜證明的方法。它只是和您生成無效密碼變體的能力一樣好。

+0

我需要這個用於更改密碼模塊。它需要從html表單輸入舊密碼和新密碼。表單將新舊數據發佈到函數,而不是一些散列密碼。所以,這不是我正在尋找的。無論如何感謝您的答案。 :) –