B2A是由知乎编程大神使用python编写的B站视频转换工具。由于B站今日举行的维护UP主权益,将AV号将全面升级为BV号,与纯数字的 AV 号不同,BV 号是一段由数字和大小写字母组成的字符串,经过算法自动生成。未来将统一使用 BV 号作为稿件标识。
相关新闻:
维护UP主权益 B站官宣:AV号将全面升级为BV号
B站表示,一直以来,AV号都是B站的视频稿件的重要标识,为了保护稿件信息安全,容纳更多投稿,维护UP主的权益,自2020年3月23日起,AV号将全面升级到BV号。
与纯数字AV号不同,BV号将是一段由数字和大小写字母组成的字符串,经过算法自动生成,未来统一使用BV号作为稿件标识。
同时,2020年3月23日前生成AV号的相关功能保持不变。例如,已分享的稿件连接,AV号搜索,以及动态、评论、私信中的高亮跳转。
而用户在复制BV号或者包含BV号的链接后,打开B站APP的同时会自动跳转至该视频。
此外,近日,哔哩哔哩(以下简称“B站”)公布了截至2019年12月31日的第四季度和全年未经审计的财务报告。
财报显示,2019财年B站总营收达67.8亿元人民币,同比增长64%,其中第四季度营收同比增长74%,达20.1亿元人民币,与上年同期相比增长74%。
并且,B站月均活跃用户再创新高达1.3亿人,同比增长40%;移动端月均活跃用户同比增长46%达1.16亿人,实现了自2018年上市以来的最高增幅。
发现方法:
首先从各种渠道的信息来看,应该是 base58 编码的。设 x 是一个钦定的 av 号,查询 这些 av 号对应的 bv 号,发现 bv 号的第 12、11、4、9、5 位分别会变化。所以猜测这些是 58 进制下的相应位。
但是直接 base58 是不行的,所以猜测异或了一个大数,并且 base58 的字符表可能打乱了。经过实验,bv 号最低位相同的数,av 号的奇偶性相同,这一定程度上印证了之前的猜想。
接下来找了一些 av 号 x,满足 x 和 x+1 对应 bv 号的第 11 位不同。设异或的数为 X,那么 ( 表示异或)。
由于 av 号(除了最新的少量视频)最多只有 27 bits,所以可以设 。然后可以发现 只和 和 有关,那么可以枚举这两个值(一共 种情况)然后使用上面的式子检查,就能得到若干可能的 和 。
这里我得到的可能值如下:(左边是 ,右边是 )
22 90983642
22 90983643
50 43234084
50 43234085
有奇有偶是因为异或 1 之后也能找到轮换表。而 则使得模 58 的余数刚好变成 减它。
我取了 b=43234084,然后处理最低位,可以得到一个字符表,即 fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF。
对于更高位,实际上还需要知道 ,这些值也可以 枚举 58 次得到,最后我得到的值是 。
这时我发现,每一位的字符表是相同的(实际上只对 b=43234084 是这样的),然后再微调一下参数(上面代码中的两个 magic number 就相当于这里的 ),最后处理了一下 的情况就得到了这份代码。