BV号转AV号 - 来自知乎的ctf大神
3月23日B站刚发布AV转BV的消息,当天下午就有大神给出了算法,tql!Orz.
网传作者mcfx是国家集训队成员,TSU智班.(反正就是tql!)
代码好像以WTFPL开源:
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)
print(dec('BV17x411w7KC'))
print(dec('BV1Q541167Qg'))
print(dec('BV1mK4y1C7Bz'))
print(enc(170001))
print(enc(455017605))
print(enc(882584971))
链接:https://www.zhihu.com/question/381784377/answer/1099438784
原回答如下: