網友評分: 5.7分
bvid to aid是由知乎編程大神采用python編寫而成的一款非常不錯的B站視頻轉換工具,由于B站今日舉行的維護UP主權益,將AV號將全面升級為BV號,與純數字的 AV 號不同,BV 號是一段由數字和大小寫字母組成的字符串,而這款工具可以將BV號轉好為AV號。
首先從各種渠道的信息來看,應該是 base58 編碼的。設 x 是一個欽定的 av 號,查詢 這些 av 號對應的 bv 號,發現 bv 號的第 12、11、4、9、5 位分別會變化。所以猜測這些是 58 進制下的相應位。
但是直接 base58 是不行的,所以猜測異或了一個大數,并且 base58 的字符表可能打亂了。經過實驗,bv 號最低位相同的數,av 號的奇偶性相同,這一定程度上印證了之前的猜想。
接下來找了一些 av 號 x,滿足 x 和 x+1 對應 bv 號的第 11 位不同。設異或的數為 X,那么 ( 表示異或)。
由于 av 號(除了最新的少量視頻)最多只有 27 bits,所以可以設 。然后可以發現 只和 和 有關,那么可以枚舉這兩個值(一共 種情況)然后使用上面的式子檢查,就能得到若干可能的 和 。
這里我得到的可能值如下:(左邊是 ,右邊是 )
22 90983642
22 90983643
50 43234084
50 43234085
有奇有偶是因為異或 1 之后也能找到輪換表。而 則使得模 58 的余數剛好變成 減它。
我取了 b=43234084,然后處理最低位,可以得到一個字符表,即 fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF。
對于更高位,實際上還需要知道 ,這些值也可以 枚舉 58 次得到,最后我得到的值是 。
這時我發現,每一位的字符表是相同的(實際上只對 b=43234084 是這樣的),然后再微調一下參數(上面代碼中的兩個 magic number 就相當于這里的 ),最后處理了一下 的情況就得到了這份代碼。
標簽: B站視頻轉換