比较字符串的最佳选择是什么?

时间:2014-02-24 18:54:41

标签: php

我在这里有两个实现,它从另一个网站中选择一个文本文件,并将这些文件与本地文本文件进行比较:

实施1:

function compareHash($remote , $local){

    $str_remote = file_get_contents($remote);
    $str_local  = file_get_contents($local);

    $hash_remote = md5($str_remote);
    $hash_local  = md5($str_local);

    return $hash_remote === $hash_local;
}

$igual = compareHash('cache/text.txt' , 'http://php.net/text.txt');

if($igual)
    echo 'mesmo conteudo';
else
    echo 'lascou-se não é igual!'   ;

实施2

$v_01 = file_get_contents('cache/text.txt');
$v_02 = file_get_contents('http://www.php.com/text.txt');

if(strcmp($v_01, $v_02) != 0) {
   echo 'differently strings';
} else {
   echo 'same strings';
}

在第一个实现中,使用MD5转换字符串是否合适?哪个是最佳选择,并且在处理速度方面效率最高?

1 个答案:

答案 0 :(得分:1)

这取决于您的要求。

如果你想要在第一次差异后失败的快速比较,你可以$string_1 == $string_2。这将表现得足够好。

如果您正在使用加密技术,则应考虑使用常量字符串比较功能,以使您的代码能够抵抗时序攻击。

https://crackstation.net/hashing-security.htm#phpsourcecode

如果您使用的是PHP 5.6.x或更高版本,则需要hash_equals()