javascript - 使用 PHP 或 JS 解码 Youtube 密码签名的最佳方法

标签 javascript php ios youtube

当字典中的 use_cipher_signature = true 通过 http://www.youtube.com/get_video_info?&video_id=Video_Id

示例编号:_JQH3G0cCtY

加密签名实际上是任何人都可以用几组有效签名进行调试的加扰签名。但是 Youtube 一直在改变加扰算法。 我见过很少有 Youtube 视频下载器可以顺利运行而不受这种不断变化的游戏的影响。我认为他们正在检查播放器并从播放器文件中提取解码脚本,因此这让他们继续前进。

我需要一些关于在这种情况下使用的实际技术的帮助。我知道“youtube-dl”——一个用于下载视频的 python 程序。由于我不擅长 python,我认为他们使用的是相同的方法。

这里还有一个用户脚本 JS 文件: http://userscripts.org/scripts/show/25105 ,这是做同样的事情。

任何有关用 PHP 或 JS 解码密码的合理方法的帮助将不胜感激。

最佳答案

Url 结构和密码在 Youtube 上不断变化。目前,解码密码签名的最佳方法解释如下:

Youtube 中的加密签名只是“加扰”签名,您必须根据播放器文件(HTML5 播放器或 Flash 播放器)中存在的算法重新排列它们。

例如 http://www.youtube.com/watch?v=UxxajLWwzqY 目前正在使用以下 HTML5 播放器文件://s.ytimg.com/yts/jsbin/html5player-vfltdb6U3.js

在此文件中,您可以通过搜索“sig”轻松搜索签名解密代码。在这种情况下,算法是:

function bz(a) {
    a = a.split("");
    a = cz(a, 61);
    a = cz(a, 5);
    a = a.reverse();
    a = a.slice(2);
    a = cz(a, 69);
    a = a.slice(2);
    a = a.reverse();
    return a.join("")
}

function cz(a, b) {
    var c = a[0];
    a[0] = a[b % a.length];
    a[b] = c;
    return a
};

上面是解密代码。

但请注意,当他们更改播放器文件时它会不断更改,因此您必须一直点击正在使用的播放器文件。

此外,要使用密码签名下载视频,您还必须注意发送相同的 cookie、使用相同的用户代理 header 、从相同的 IP 地址发送请求以及在提取后立即发送请求。所有这些在某些时候都是或曾经是必需的

如果对密码解密算法感兴趣,请访问CipherAPI

另一个很酷的 API:TYstream API

关于javascript - 使用 PHP 或 JS 解码 Youtube 密码签名的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510857/

相关文章:

javascript - 在不调用 connectedCallback 的情况下交换 "Custom Element"

javascript - 如何在 https.get 调用 node.js 时禁用证书缓存?

javascript - ng-repeat 中的 ng-click,未正确格式化值

php - SQL-PHP 从 URL 末尾抓取信息并与数据库中的行进行比较

ios - 更改静态 TableView 单元格高度

ios - 标签栏 Controller 需要点击2次返回主视图

javascript - 正则表达式不返回 javascript 中的所有匹配项

php - 在 IE8 中显示 PDF 文件时 header() 的问题

ios - 用户可以切换到禁用了用户交互的 UITextField

php - mysql SELECT with 'A' from php array 不起作用(因为 php 和 mysql 中的 `A` 看起来相同,但一个用俄语写,另一个用英语写)