当我对其视频ID生成器进行逆向工程时,我在youtube中发现了一些错误。如果我更改了视频ID的最后一个字符,它会重定向到同一个视频。这怎么可能?
示例:
https://www.youtube.com/watch?v=9bZkp7q19f4
但是这个网址不起作用:
System.Data.DataTable
答案 0 :(得分:1)
videoId是8字节(64位)base64编码。来自this post:
对于videoId,它是一个8字节(64位)整数。应用 Base64编码到8个字节的数据需要11个字符。然而, 因为每个Base64字符恰好传达6位,这个分配 实际上可以容纳11×6 = 66位 - 超过2位 我们的有效载荷需要什多余的位设置为零,具有 排除某些字符在最后出现的效果 编码字符串的位置。特别是,videoId将永远 以下列之一结束:{A,E,I,M,Q,U,Y,c,g,k,o,s, w,0,4,8}
在您的情况下,您的videoId为9bZkp7q19f0
:
enc. | 9 b Z k p 7 q 1 9 f | 0
value | 61 27 25 36 41 59 42 53 61 31 | 52
bin. | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101 00
如果修改了最后一个字符,如果修改了4个最有意义位(MSB),则64位id将会改变:
9bZkp7q19f1:
enc. | 9 b Z k p 7 q 1 9 f | 1
value | 61 27 25 36 41 59 42 53 61 31 | 53
bin. | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101 01
9bZkp7q19f2:
enc. | 9 b Z k p 7 q 1 9 f | 2
value | 61 27 25 36 41 59 42 53 61 31 | 54
bin. | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101 10
9bZkp7q19f3:
enc. | 9 b Z k p 7 q 1 9 f | 3
value | 61 27 25 36 41 59 42 53 61 31 | 55
bin. | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1101 11
这将提供不同的视频ID(请注意,最后一个字节的4个MSB已修改为1101
到1110
):
enc. | 9 b Z k p 7 q 1 9 f | 4
value | 61 27 25 36 41 59 42 53 61 31 | 56
bin. | 111101 011011 011001 100100 101001 111011 101010 110101 111101 011111 | 1110 00
9bZkp7q19f4
将提供不同的64位ID。请注意,如果此类ID存在9bZkp7q19f4
,9bZkp7q19f5
,9bZkp7q19f6
和9bZkp7q19f7
将提供相同的ID。
您可以查看base64编码/值here