本文编写于 185 天前,最后修改于 185 天前,其中某些信息可能已经过时。

一觉起来小破站av号突然全变bv号了,时代变了啊

以下算法为mcfx师傅在zhihu上以WTFPL协议开源,这里存个档记录下

av号是顺序号
通过算法对应转化到bv号:

  • 异或
  • 加上一个基准
  • 换位
  • 变种base58
#变种base58码表
'''
table='fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
tr={}
for i in range(58):
    tr[table[i]]=i
'''
tr={'1': 13, '3': 46, '2': 12, '5': 43, '4': 31, '7': 40, '6
': 18, '9': 5, '8': 28, 'A': 54, 'C': 15, 'B': 20, 'E': 3
9, 'D': 8, 'G': 45, 'F': 57, 'H': 36, 'K': 51, 'J': 38, '
M': 49, 'L': 42, 'N': 52, 'Q': 7, 'P': 53, 'S': 9, 'R': 4
, 'U': 10, 'T': 50, 'W': 34, 'V': 44, 'Y': 25, 'X': 6, 'Z
': 1, 'a': 26, 'c': 56, 'b': 29, 'e': 24, 'd': 3, 'g': 47
, 'f': 0, 'i': 22, 'h': 27, 'k': 16, 'j': 41, 'm': 11, 'o
': 2, 'n': 37, 'q': 21, 'p': 35, 's': 33, 'r': 17, 'u': 4
8, 't': 30, 'w': 55, 'v': 23, 'y': 14, 'x': 32, 'z': 19}
#换位
s=[11,10,3,8,4,6,2,9,5,7]
#MagicNumber
xor=177451812
add=100618342136696320

def dec(x):
    r=0
    for i in range(10):
        r+=tr[x[s[i]]]*58**i
    return (r-add)^xor

def enc(x):
    x=(x^xor)+add
    r=list('BV          ')
    for i in range(10):
        r[s[i]]=table[x//58**i%58]
    return ''.join(r)

原文链接:https://www.zhihu.com/question/381784377/answer/1099438784