1

我想做的是,

打开word文件,读取一行,将其转换为md5,如果它不存在则写入db(word和加密字符串)

由于某种原因,它不起作用。

$file = fopen("list.txt", "r");

while (!feof($file))
{
$word = fgets($file);
$word = mysql_real_escape_string($word); // to prevent injections
$md5string = md5($word);

//check if in DB

$check = mysql_query("SELECT id FROM table WHERE word='$word'") or die(mysql_error
    ());
if (mysql_num_rows($check) > 0)
{
} //Nothing to do.
else
{
    $write = mysql_query("INSERT INTO table (word, md5string) VALUES ('$word','$md5string')") or
        die(mysql_error());
}
}

它正在制作散列并存储所有内容,但制作的散列并不正确。

知道我的代码有什么问题吗?

修复:我在散列之前 mysql_real_escaped 字符串,这就是我错的地方。

$word = trim(fgets($file));
$md5string = md5($word);
$word = mysql_real_escape_string($word); // to prevent injections`

添加:我刚刚使用从这里得到的建议更正了我的脚本并发现

Md5ecnrypter.com 做错了。

他们在散列之前转义了字符串。多么蹩脚。刚刚检查了其他站点以查看 SO 建议是正确的。

4

4 回答 4

3

只是对此进行尝试,但是您正在使用的 MD5 是文件在mysql_real_escape_string() 调用可能修改后的 MD5。

于 2012-04-04T17:43:24.310 回答
2

也许md5()以前用过mysql_real_escape_string()

于 2012-04-04T17:45:22.907 回答
1

尝试更改行的顺序

$word = trim(fgets($file));
$md5string = md5($word);
$word = mysql_real_escape_string($word); // to prevent injections
于 2012-04-04T17:45:45.777 回答
0

嗯,

就我个人而言,我会寻找哈希,所以:

SELECT * FROM table WHERE md5word=$hashed_word

我也会在 md5-ing 这个词之前使用 trim,你真的不需要在 md5 之后使用 mysql_real_escape_string(),因为 md5 将数据转换为十六进制数,所以,如果有的话,最好先这样做.

于 2012-04-04T18:03:23.123 回答