You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中部分截断BitTorrent哈希LIKE匹配失败问题求助

BitTorrent哈希匹配问题求助

我的数据库包含两列二进制编码的BitTorrent info-hash字符串:一列是20字节的SHA1格式(BT v1),另一列是32字节的SHA2格式(BT v2)。我通过以下PHP代码实现哈希匹配逻辑:

if (strlen($info_hash) == 32) {
    $is_bt_v2 = true;
} elseif (strlen($info_hash) == 20) {
    $is_bt_v2 = false;
}
$info_hash = rtrim(DB()->escape($info_hash), ' ');

$info_hash_where = $is_bt_v2 ? "WHERE tor.info_hash_v2 = '$info_hash'" : "WHERE tor.info_hash = '$info_hash' OR tor.info_hash_v2 LIKE '$info_hash%'";

$sql = "
    SELECT tor.topic_id, tor.poster_id, tor.tor_type, tor.info_hash, tor.info_hash_v2, u.*
    FROM " . BB_BT_TORRENTS . " tor
    LEFT JOIN " . BB_BT_USERS . " u ON u.auth_key = '$passkey_sql'
    $info_hash_where
    LIMIT 1
";
$row = DB()->fetch_row($sql);

逻辑说明

  • 输入哈希长度为32字节时,仅匹配v2列
  • 输入哈希长度为20字节时,先匹配v1列,再通过LIKE匹配v2列的前缀(所有输入的20字节哈希都是完整v2哈希截断而来)

问题

完整32字节的v2哈希可正常匹配,但部分截断为20字节的v2哈希无法通过LIKE匹配到,已经排查MariaDB设置一周仍未找到原因,请求帮助。

示例哈希

可匹配情况

  • 完整v2哈希:97978479e7eba00af6f24953f6b94b229b556627167b710472ad4c9bc4ceac41
  • 截断后:97978479e7eba00af6f24953f6b94b229b556627
  • URL编码:%97%97%84y%e7%eb%a0%0a%f6%f2IS%f6%b9K%22%9bUf%27

无法匹配情况

  • 完整v2哈希:b5c69a98c0235cc2af0fa0c956a2984dc10410b1ab0eee46c9cb0c876d0c5189
  • 截断后:b5c69a98c0235cc2af0fa0c956a2984dc10410b1
  • URL编码:%b5%c6%9a%98%c0%23%5c%c2%af%0f%a0%c9V%a2%98M%c1%04%10%b1

内容的提问来源于stack exchange,提问作者greenandgreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:27:47