代码在比较字符串时出错


Code is buggy on comparing strings

我遇到的问题是,当我编辑字符串"dbPassword"时,我的脚本会运行得很好,因为注意到2个字符串不匹配。例如,如果我删除字母"c"

d
array(1) { ["c"]=> int(6) } not matching.. 
123bdcbadbcabcbcadcbadbc
123bcdbddbcabcccbdaabba

但当我对$anPassword字符串做同样的事情时,它基本上会给我一个OK消息。相反,它只会导致空白处是我拿出一封信的地方。(字母B)

$anPassword = "123bdcbad cabcbcadcbadbc"; //Removed 1 letter
$dbPassword = "123bdcbadbcabcbcadcbadbc"; //Unchanged / original string

它仍然给我…

应该匹配。。。理论上。。。123bdcbadcabcbcadcbadbc123abadabccbbddcbacdcbc

基本上,为什么我的代码会出错并返回匹配,而它显然不是。以及为什么只有一些字符会导致这种情况。

$anPassword = "123bdcbadbcabcbcadcbadbc"; //User encrypted password on form submission
$dbPassword = "123bdcbadbcabcbcadcbadbc"; //Database encrypted password.
$begChars1[0] = substr($anPassword, 0, 3);
$begChars1[1] = substr($anPassword, 3);
$begChars2[0] = substr($dbPassword, 0, 3);
$begChars2[1] = substr($dbPassword, 3);
$begChars2[2] = str_shuffle($begChars2[1]);
$compData1 = array_count_values(str_split($begChars1[1]));
$compData2 = array_count_values(str_split($begChars2[2]));
$result = array_diff($compData1, $compData2);
if($begChars1[0] != $begChars2[0]) {
    echo "not matching...";
}
if($result == null) {
    echo "Should be matching... Theoredically...";
} else {
    echo "not matching.. " . var_dump($result);
}
echo "<br />" . $begChars1[0] . $begChars1[1] . "<br />" . $begChars2[0] . $begChars2[2];

我不明白你想要实现什么,但我看到的是。

你的大部分困惑都源于这句话。

$result = array_diff($compData1, $compData2);

您认为这将返回关于这两个数组的所有差异。这实际上是返回array1中不存在于array2中的值。

在比较之前,您的数组都是这样的。

array (size=4)
  'b' => int 7
  'd' => int 4
  'c' => int 6
  'a' => int 4
array (size=4)
  'a' => int 4
  'c' => int 6
  'd' => int 4
  'b' => int 7

两个字符串包含相同数量的每个字符,你只是出于某种原因打乱了它们。array_diff将不返回任何内容,这是可以理解的,因为没有元素顺序的数组实际上没有什么不同。

如果在第二个字符串中删除了一个"x",则会在$result中看到一些内容。

无论你想发明什么疯狂的方法,只要不存储密码,你就可以省去很多麻烦。相反,像其他人一样对他们进行哈希。