求解YouTube订阅接口带_u后缀的SAPISIDHASH哈希算法
YouTube订阅接口SAPISIDHASH哈希算法推导
问题背景
开发YouTube频道订阅机器人时,使用通用SAPISIDHASH算法sha1(new Date().getTime() + ' ' + SAPISID + ' ' + origin)生成的哈希与实际请求不符:
- 实际哈希末尾带有
_u后缀 - Authorization头中同时出现
SAPISIDHASH和SAPISID3PHASH,且两者内容完全重复
从请求示例提取的关键信息
从提供的POST请求中拆解核心字段:
- Authorization头:
SAPISIDHASH 1737533199_99687cec7b36bd2ca2ed4cb15023490f1c468019_u SAPISID3PHASH 1737533199_99687cec7b36bd2ca2ed4cb15023490f1c468019_u - 时间戳:
1737533199(秒级,而非通用算法的毫秒级) - Origin:
https://www.youtube.com - 会话凭证:Cookie中的
__Secure-3PSID(对应Authorization头里的SAPISID3PHASH字段)
正确的哈希生成规则
1. 字符串拼接格式
使用秒级Unix时间戳,拼接规则为:
{timestamp} {3PSID值} {origin}
参数说明:
timestamp:当前时间的秒级Unix时间戳(如请求中的1737533199)3PSID值:Cookie中的__Secure-3PSID内容origin:请求的Origin头值(固定为https://www.youtube.com)
2. 哈希计算与后缀
对拼接后的字符串计算SHA1哈希,在结果末尾添加_u后缀。
3. Authorization头构造
由于使用的是__Secure-3PSID,Authorization头需同时声明SAPISIDHASH和SAPISID3PHASH,两者的哈希内容完全一致:
Authorization: SAPISIDHASH {timestamp}_{hash}_u SAPISID3PHASH {timestamp}_{hash}_u
验证匹配
以请求中的参数为例:
- 拼接字符串:
1737533199 {__Secure-3PSID值} https://www.youtube.com - SHA1哈希结果:
99687cec7b36bd2ca2ed4cb15023490f1c468019 - 最终哈希串:
1737533199_99687cec7b36bd2ca2ed4cb15023490f1c468019_u - 生成的Authorization头与请求示例完全一致
内容的提问来源于stack exchange,提问作者yeah_well
相关产品推荐
相关产品推荐

