// ==UserScript== // @name bv2av // @namespace http://tampermonkey.net/ // @version 1.2 // @description Change bv to av // @author ouuan // @match https://www.bilibili.com/* // @grant none // @downloadURL none // ==/UserScript== // Algorithm from https://www.zhihu.com/question/381784377/answer/1099438784 (function() { 'use strict'; var table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'; var tr = {}; for (var i = 0; i < 58; ++i) { tr[table[i]] = i; } var s = [11,10,3,8,4,6]; var xor = 177451812; var add = 8728348608; function dec(x) { var r = 0; for (var i = 0; i < 6; ++i) { r += tr[x[s[i]]] * (58 ** i); } return 'av' + String((r - add) ^ xor); } function bv2av(x) { var bv = x.match(/[bB][vV][fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF]{10}/g); if (bv) { for (var i = 0; i < bv.length; ++i) { x = x.replace(bv[i], dec(bv[i])); } } return x; } var url = window.location.href; var newUrl = bv2av(url); if (url != newUrl) { window.location.replace(newUrl); } setInterval(function() { var nodes = document.querySelectorAll('a'); for(var i = 0; i < nodes.length; ++i) { var o = nodes[i]; o.href = bv2av(o.href); } }, 500); })();