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
相关产品推荐
相关产品推荐

