揭秘:b站可以通过弹幕查询到发送者吗?答案是:不可行

查找发送者

发弹幕被找到

最近,我的一个好兄弟遇到了这样一个问题:他在b站发弹幕,结果被人找到了。他对此很困惑:“发送弹幕不是匿名的吗?只有评论才能看到用户名啊,难道发弹幕也可以被找到吗?“

事实上,b站的弹幕确实是匿名的,但是为什么好兄弟却会因为发弹幕被找到呢?发送弹幕的人总是可以被找到吗?下面,我们就来揭秘一下这个问题。

使用工具

如果,你去网上搜索,“怎么样查询弹幕的发送者”,可能最常见到的,是教程告诉你使用这样一个工具,查b站弹幕发送者工具

 首先,按照要求,输入一个视频地址:

此时,就查询到了很多弹幕,然后再点击查询,就可以看到弹幕的发送者了。看起来,非常厉害,但是,这是怎么做到的呢?

 弹幕查询

获取视频历史弹幕

首先,我们可以通过一个视频,查询到其历史弹幕,例如,再这个函数中,只需要提供一个bv号,就可以得到视频的历史弹幕,以及发送者。

不过需要注意的是,此处的发送者并非明文的发送者,而是通过加密校验的发送者,因此,是不能够直接得到对应用户的。

import requests
from parsel import Selectordef get_danmaku_sender(bvid, agent="bilibili ganbei"):headers = {"user-agent": agent}url = "https://api.bilibili.com/x/web-interface/view"r = requests.get(url, headers=headers, params={"bvid": bvid})oid = r.json().get("data").get("cid")url2 = "https://api.bilibili.com/x/v1/dm/list.so"r2 = requests.get(url2, headers=headers, params={"oid": oid})s = Selector(r2.content.decode())sender_list = []d = s.xpath("//d")for i in d:p = i.xpath("./@p").get()sender = p.split(",")[6]text = i.xpath("./text()").get()sender_list.append((text, sender))return sender_list

crc32校验

b站的用户匿名,使用的是crc32校验,因此,我们也可以通过python编程,将用户的uid,通过crc32,得到其匿名的值。

可以使用binascii

import binasciidata = "1000000000".encode()
crc32_value = binascii.crc32(data)
print(f"CRC32校验码: {crc32_value:08x}")

也可以使用zlib

import binasciidata = "1000000000".encode()
crc32_value = zlib.crc32(data)
print(f"CRC32校验码: {crc32_value:08x}")

实际上,crc32的所有输出可能约是42.95亿。与哈希类似,是有“碰撞”的可能的,也就是,多个输入会对应到同一个输出。换句话说,就是多个不同的用户,可能有相同的匿名结果。

那么,用户的uid是怎么样的呢?这个在用户的个人页面可以看到,是纯数字的。理论上,用户的编号11位就够了。因为11位就是100亿了,如果11位可以以9开头的话,那么足足有近1000亿的账号。即使地球上所有人都要用b站,而且,每个人都要注册10个账号也是足够用的。在这个范围内,平均会碰撞2-3次。

但是很显然,问题并没有那么容易。虽然理论上11位的uid足够使用了,但是,近年来,b站可能出于安全考虑,已经将新用户的uid增加到了16位了,这是一个非常庞大的数字。比如,某位大会员,就有16位的uid,例如:3546672061745379

那么,在这么大的范围内,crc32的碰撞又是怎么样的呢?假如,16位的所有账号全都被启用,那么会发生数十万次的碰撞(当然,实际上不可能有那么多账号在用,大多是空号)。在这个数量下,通过匿名的crc32值进行反查是不可能的。

传统位数uid查询

根据之前的分析,16位uid是无法通过常规方式解析出来的。假设,我们不考虑新的16位uid,只考虑传统的6位-11位uid,那么,这是一个有限的范围,因此,可以将所有的结果提前计算好,然后进行存储。在需要的情况下,就可以进行“反查”,类似于md5值的爆破。

这是一个简单的例子,首先将所有计算结果存入redis数据库中(需要注意的是,即使是11位数的有限范围,也包含了数百亿的结果,因此,需要消耗大量的性能与存储空间)

import redis
import zlibr = redis.Redis(host="localhost", port=6379, db=0)def store_crc32_values():for i in range(100000, 20000000000):data = str(i).encode("utf-8")crc_value = zlib.crc32(data)crc_key = f"{crc_value:08x}"r.sadd(crc_key, i)if i % 1000000 == 0:print(f"当前的进度为: {i}")store_crc32_values()

当我们已经存储了所有情况以后,就可以查询所有可能结果了,类似于之前的查询工具。

import redisr = redis.Redis(host="localhost", port=6379, db=0)def query_crc32(crc_value):crc_key = f"{crc_value}"result = r.smembers(crc_key)if result:return [int(x.decode("utf-8")) for x in result]else:return Nonecrc_value_to_query = "efa013c8"
results = query_crc32(crc_value_to_query)if results:print(f"CRC32值{crc_value_to_query},对应的原始输入为:{results}")
else:print("未找到对应的原始输入!")

此时,找到的值,就是一个可能的弹幕发送者。如果对应了多个值,那么就说明是这几位用户中的一个。后续还要依次查看所有用户,来进一步分析可能是哪位用户。

最终结论

现在,我们知道了,根据弹幕来查找用户是可能的,但不总是准确的,也不总是能找到。

其中,如果是一个老用户,是普通的11位以下的uid,那么是可以找到发送者列表的,他可能包含了几位可能的发送者,通过进一步分析,大概可以找到发送的用户(需要注意的是,由于我们不确定是老用户发送的,还是新用户发送的,该方法已经不准确了,因为,可能是未包含在发送者列表的新用户发送的,且恰好与老用户有相同匿名)。

但是,如果是一位新用户,用的是16位的uid,那么几乎是不可能找到对应的发送者的(特别情况下,根据b站新用户uid生成规则分析,可能可以锁定一个小的范围,例如,16位数其实只有包含了明确规则的一部分被启用。这样,可以大大缩小需要分析的范围)。因为这个范围太过广泛,包含了数十万可能性,根本无从分析。

因此,最终结论是,现在通过弹幕来查找用户变得不可能了,你可以找到“嫌疑人”,但并不总是准确。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13153.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

安装mysql、Navicat 17

1.安装mysql 下载地址 https://downloads.mysql.com/archives/installer/ 选择最新版本或者你需要的版本 点击第二个Download下载 下载完毕后双击启动,之后是这个页面 选Custom(第四个)自定义安装,可以将mysql安装到自定义目录…

人工智能助手是否让程序员技能退化?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

RecyclerView进阶知识讲解

在 Android 开发中,RecyclerView 是一种高效的列表和网格布局控件,用于显示大规模数据。尽管基本使用方法简单,但深入理解并掌握其高级进阶用法能大幅提升用户体验和应用性能。下面,我将从布局管理、动画和手势、自定义缓存、优化…

测试用例设计方法之判定表

测试用例设计方法之判定表 1. 为什么要有判定表方法2. 什么是判定表3. 判定表法设计用例步骤4. 判定表使用场景 1. 为什么要有判定表方法 案例: 验证"若用户欠费或者关机, 则不允许主被叫"功能的测试 说明: 等价类和边界值分析法主要关注单个输入类条件的测试并未考…

SpringCloud篇(服务拆分 / 远程调用 - 入门案例)

目录 一、服务拆分原则 二、服务拆分示例 1. 案例需求 2. 案例要求 3. 导入SQL语句 4. 实现思路 4.1. 创建父工程 cloud-demo 管理依赖 依赖导入思路 4.2. 创建子工程 order-servic 4.3. 创建子工程 user-servic 4.4. 创建 cloud_order 数据库和表并插入数据 4.5. …

特征融合篇 | YOLO11改进 | 更换上采样方式之轻量级通用上采样算子CARAFE

前言:Hello大家好,我是小哥谈。CARAFE算子的主要特点是在保持轻量级功能的同时,能够提供比其他上采样算子更好的性能。它通过少量的参数和计算量来实现高效的图像上采样。CARAFE算子能够根据像素之间的关系进行自适应的上采样,从而…

Java集合Queue——针对实习面试

目录 Java集合QueueQueue接口的特点是什么?Queue和Deque的区别?ArrayDeque和LinkedList的区别?什么是PriorityQueue?什么是BlockingQueue? Java集合Queue Queue接口的特点是什么? Queue接口在Java中是一个…

【支付宝崩了】复盘

一、背景 2024年11月11日,#支付宝崩了#冲上微博热搜第一 部分网友反映支付宝 App无法正常使用,他们遇到了同一笔订单被扣款三次、余额宝转账至余额后余额显示为0、线下支付后商家未收到款项但银行卡已被扣款等问题。 此外,有网友称支付…

丹摩征文活动|FLUX.1+ComfyUI的详细部署以及实验总结

公主请阅 1. FLUX.1的简介2. 部署过程创建资源ComfyUI的部署操作部署FLUX.1 如何使用?实验总结:环境搭建与工具安装实验步骤实验结果分析总结 1. FLUX.1的简介 FLUX.1 是由黑森林实验室开发的图像生成工具,分为三个版本: FLUX-1-…

基于STM32的智能仓库管理系统设计

引言 本项目基于STM32微控制器设计了一个智能仓库管理系统,通过集成多个传感器模块和控制设备,实现对仓库环境和物资管理的自动化监控。该系统能够实时监测仓库内的温湿度、烟雾浓度等参数,并且通过红外传感器监控人员出入,结合R…

206面试题(47~60)

208道Java面试题 47~60 **208道Java面试题****47. 在 Java 程序中怎么保证多线程的运行安全?****48. 多线程中 synchronized 锁升级的原理是什么?****49. 什么是死锁?****50. 怎么防止死锁?****51. ThreadLocal 是什么&#xff1f…

MySQl基础----Linux下数据库的密码和数据库的存储引擎(内附 实操图和手绘图 简单易懂)

绪论​ 涓滴之水可磨损大石,不是由于他力量强大,而是由于昼夜不舍地滴坠。 只有勤奋不懈地努力,才能够获得那些技巧。 ——贝多芬。新开MySQL篇章,本章非常基础,但同时需要一定的Linux基础,所以假若你没学习…

番外篇 | 关于YOLO11算法的改进点总结

前言:Hello大家好,我是小哥谈。在2024年9月27日盛大举行的YOLO Vision 2024活动上,Ultralytics公司震撼发布了YOLO系列的最新成员—YOLO11。作为Ultralytics YOLO系列实时目标检测器的最新迭代,YOLO11凭借尖端的准确性、速度和效率…

增长放缓,跨境电商如何以“体验”撬动高转化和高复购?

增长放缓, 跨境电商步入发展新周期 伴随着疫情红利的逐渐收缩,跨境电商市场从野蛮高速增长回归理性,步入新的发展周期,增幅放缓成为新常态。根据eMarketer的统计数据,全球跨境电商销售增长从2020年的26.7%下跌至2022年…

2024“龙信杯“电子数据取证竞赛——计算机取证题目Writeup

以下内容是2024年“龙信杯”电子数据取证竞赛计算机取证题目的答案与解题思路 前置 前置发现电脑中有EFS加密文件,故使用仿真软件保持原有密码进行仿真 1.分析计算机检材,嫌疑人在将其侵公数据出售前在Pycharm中进行了AES加密,用于加密的key…

Linux学习_12

第十一章 管理Linux软件包和进程 主要包括源码下载安装软件,PRM管理工具,YUM/DNF管理工具 源码下载安装软件 源码文件:是指包含计算机程序源代码的文本文件。源代码是用特定编程语言编写的人类可读指令,它描述了计算机程序的逻辑、…

2024年Python最新下载安装教程,附详细图文,持续更新

大家好,我是Java徐师兄,今天为大家带来的是Python3 的下载安装教程,适用于所有 Python3 版本,感兴趣的可以看一下 文章目录 简介一、Python的下载1 网盘下载地址 (下载速度比较快,推荐)2 官网下载地址 二、…

JAVA同城服务顺风车预约车拼车系统源码支持小程序+公众号+H5

JAVA同城服务顺风车预约车拼车系统源码,全面支持小程序、公众号及H5平台,精准定位于解决城市出行痛点,满足用户多样化、灵活化的出行需求。市场分析显示,该系统凭借便捷的预约拼车功能,有效缓解城市交通压力&#xff0…

126.WEB渗透测试-信息收集-ARL(17)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:125.WEB渗透测试-信息收集-ARL(16) POC信息里面有一些集成的poc …

什么是 ISP:了解互联网服务提供商的作用

一、ISP 基础知识 从本质上讲,ISP 提供两项主要服务:互联网接入和互联网传输。互联网接入是指使用户能够连接到互联网的物理和逻辑连接,通常通过调制解调器、路由器或其他网络设备。此连接可以是有线的(例如通过 DSL、光纤或电缆…