2017-07-30 20 views
2

YouTubeのビデオIDジェネレータをリバースエンジニアリングすると、いくつかのバグが見つかりました。ビデオIDの最後の文字を変更すると、同じビデオにリダイレクトされます。これはどのように可能ですか?異なるYouTube URLが同じビデオを指しています

例:

https://www.youtube.com/watch?v=9bZkp7q19f0 
https://www.youtube.com/watch?v=9bZkp7q19f1 
https://www.youtube.com/watch?v=9bZkp7q19f2 
https://www.youtube.com/watch?v=9bZkp7q19f3 

しかし、このURLが機能しない:

https://www.youtube.com/watch?v=9bZkp7q19f4 

答えて

1

VIDEOIDエンコード8バイト(64ビット)base64です。 〜からthis post

は、8バイト(64ビット)の整数です。 Base64エンコーディングを8バイトのデータに適用するには、11文字が必要です。しかし、 各Base64文字は正確に6ビットを伝送するので、この割り当て は実際には11×6 = 66ビットを保持することができます。つまり、ペイロードに必要なビット数は です。超過ビットはゼロに設定され、符号化された文字列の最後の 位置に現れる特定の文字を除外する効果が になります。特に、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最もsignificativeビット(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  | 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 

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が1110から1101修飾されます)与えます

9bZkp7q19f4は、異なる64ビットのIDを与えます。そのようなIDが存在する場合、9bZkp7q19f49bZkp7q19f59bZkp7q19f6および9bZkp7q19f7は同じIDを与えます。

base64のエンコード/値を確認できますhere

関連する問題