B站改用随机的BV视频编号之后,知乎有大佬马上推算出了转换的算法,🐮🍺。这里对算法进行了一点修饰,方便使用。

def init():
    global table,tr,s,xor,add
    table='fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
    tr={}
    for i in range(58):
        tr[table[i]]=i
    s=[11,10,3,8,4,6]
    xor=177451812
    add=8728348608

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

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

def main():
    print('---av和BV编号转换---\n\n\n')
    while True:
        sour = input('请输入待转换的视频编号(输入为空时结束):')
        if sour[0] in ['A', 'a']:
            dest = enc(int(sour[2:]))
        elif sour[0] in ['B', 'b']:
            dest = 'av' + str(dec('BV'+sour[2:]))
        else:
            break
        print('转换结果为:', dest)

if __name__ == '__main__':
    init()
    main()
分类: 代码

0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注