C#B站BV号转AV号小工具及原理

  • A+

C#B站BV号转AV号小工具及原理

BV号转AV号工具

C#B站BV号转AV号小工具及原理

根据知乎大佬 mcfx 提供的 Python 算法改写而成的小工具,还有xsky123做的一个网页js脚本文件自动转成AV号的

腾讯哈勃分析系统

 

 

 

 

BV号转AV原理

 

  1. table='fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
  2. tr={}
  3. for i in range(58):
  4.     tr[table[i]]=i
  5. s=[11,10,3,8,4,6]
  6. xor=177451812
  7. add=8728348608
  8. def dec(x):
  9.     r=0
  10.     for i in range(6):
  11.         r+=tr[x展开]]*58**i
  12.     return (r-add)^xor
  13. def enc(x):
  14.     x=(x^xor)+add
  15.     r=list('BV1  4 1 7  ')
  16.     for i in range(6):
  17.         r展开]=table[x//58**i%58]
  18.     return ''.join(r)
  19. print(dec('BV17x411w7KC'))
  20. print(dec('BV1Q541167Qg'))
  21. print(dec('BV1mK4y1C7Bz'))
  22. print(enc(170001))
  23. print(enc(455017605))
  24. print(enc(882584971))

互相转换脚本,如果算法没猜错,可以保证在 av 号 [公式] 时正确,同时应该在 C#B站BV号转AV号小工具及原理 时也是正确的。此代码以 WTFPL 开源。

UPD:之前的代码中,所有数位都被用到是乱凑的,实际上并不需要,目前只要低 6 位就足够了。(更大的 av 号需要 64 位整数存储,但是 b 站现在使用的应该还是 32 位整数,所以应该还要很久)

发现的方法:

首先从各种渠道的信息来看,应该是 base58 编码的。设 x 是一个钦定的 av 号,查询 C#B站BV号转AV号小工具及原理 这些 av 号对应的 bv 号,发现 bv 号的第 12、11、4、9、5 位分别会变化。所以猜测这些是 58 进制下的相应位。

但是直接 base58 是不行的,所以猜测异或了一个大数,并且 base58 的字符表可能打乱了。经过实验,bv 号最低位相同的数,av 号的奇偶性相同,这一定程度上印证了之前的猜想。

接下来找了一些 av 号 x,满足 x 和 x+1 对应 bv 号的第 11 位不同。设异或的数为 X,那么 [公式]C#B站BV号转AV号小工具及原理 表示异或)。

由于 av 号(除了最新的少量视频)最多只有 27 bits,所以可以设 [公式] 。然后可以发现 [公式] 只和 [公式][公式] 有关,那么可以枚举这两个值(一共 [公式] 种情况)然后使用上面的式子检查,就能得到若干可能的 [公式]C#B站BV号转AV号小工具及原理

这里我得到的可能值如下:(左边是 [公式] ,右边是 C#B站BV号转AV号小工具及原理

  1. 22 90983642
  2. 22 90983643
  3. 50 43234084
  4. 50 43234085

有奇有偶是因为异或 1 之后也能找到轮换表。而 [公式] 则使得模 58 的余数刚好变成 C#B站BV号转AV号小工具及原理 减它。

我取了 b=43234084,然后处理最低位,可以得到一个字符表,即 fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF。

对于更高位,实际上还需要知道 [公式] ,这些值也可以 枚举 58 次得到,最后我得到的值是 C#B站BV号转AV号小工具及原理

这时我发现,每一位的字符表是相同的(实际上只对 b=43234084 是这样的),然后再微调一下参数(上面代码中的两个 magic number 就相当于这里的 [公式] ),最后处理了一下 C#B站BV号转AV号小工具及原理 的情况就得到了这份代码。


作者:mcfx
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

阿小州

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: