博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分析优酷2016.04最新视频加密算法
阅读量:5743 次
发布时间:2019-06-18

本文共 4361 字,大约阅读时间需要 14 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_21158419/article/details/51118506
算法整理 // 使用到的加密算法//function rc4(a, b) {	for (var c, d = [], e = 0, f = "", g = 0; 256 > g; g++)		d[g] = g;	for (g = 0; 256 > g; g++)		e = (e + d[g] + a.charCodeAt(g % a.length)) % 256, c = d[g], d[g] = d[e], d[e] = c;	g = 0,	e = 0;	for (var h = 0; h < b.length; h++)		g = (g + 1) % 256, e = (e + d[g]) % 256, c = d[g], d[g] = d[e], d[e] = c, f += String.fromCharCode(b.charCodeAt(h)^d[(d[g] + d[e]) % 256]);	return f}function translate(a, b) {	for (var c = [], d = 0; d < a.length; d++) {		var e = 0;		e = a[d] >= "a" && a[d] <= "z" ? a[d].charCodeAt(0) - "a".charCodeAt(0) : a[d] - "0" + 26;		for (var f = 0; 36 > f; f++)			if (b[f] == e) {				e = f;				break			}		e > 25 ? c[d] = e - 26 : c[d] = String.fromCharCode(e + 97)	}	return c.join("")}function decode64(a) {	if (!a)		return "";	a = a.toString();	var b,	c,	d,	e,	f,	g,	h,	i = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);	for (g = a.length, f = 0, h = ""; g > f; ) {		do			b = i[255 & a.charCodeAt(f++)];		while (g > f && -1 == b);		if (-1 == b)			break;		do			c = i[255 & a.charCodeAt(f++)];		while (g > f && -1 == c);		if (-1 == c)			break;		h += String.fromCharCode(b << 2 | (48 & c) >> 4);		do {			if (d = 255 & a.charCodeAt(f++), 61 == d)				return h;			d = i[d]		} while (g > f && -1 == d);		if (-1 == d)			break;		h += String.fromCharCode((15 & c) << 4 | (60 & d) >> 2);		do {			if (e = 255 & a.charCodeAt(f++), 61 == e)				return h;			e = i[e]		} while (g > f && -1 == e);		if (-1 == e)			break;		h += String.fromCharCode((3 & d) << 6 | e)	}	return h}function encode64 (a) {	if (!a)		return "";	a = a.toString();	var b,	c,	d,	e,	f,	g,	h = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";	for (d = a.length, c = 0, b = ""; d > c; ) {		if (e = 255 & a.charCodeAt(c++), c == d) {			b += h.charAt(e >> 2),			b += h.charAt((3 & e) << 4),			b += "==";			break		}		if (f = a.charCodeAt(c++), c == d) {			b += h.charAt(e >> 2),			b += h.charAt((3 & e) << 4 | (240 & f) >> 4),			b += h.charAt((15 & f) << 2),			b += "=";			break		}		g = a.charCodeAt(c++),		b += h.charAt(e >> 2),		b += h.charAt((3 & e) << 4 | (240 & f) >> 4),		b += h.charAt((15 & f) << 2 | (192 & g) >> 6),		b += h.charAt(63 & g)	}	return b}//YKP.userCache.sid & YKP.userCache.token 算法//YK.mk.a3 = "b4et"YKP.userCache.a1 = 4d = [19, 1, 4, 7, 30, 14, 28, 8, 24, 17, 6, 35, 34, 16, 9, 10, 13, 22, 32, 29, 31, 21, 18, 3, 2, 23, 25, 27, 11, 20, 5, 15, 12, 0, 33, 26]b.security.encrypt_string = json数据中的security.encrypt_string值e = rc4(translate(YK.mk.a3 + "o0b" + YKP.userCache.a1, d).toString(), decode64(b.security.encrypt_string))YKP.userCache.sid = e.split("_")[0]YKP.userCache.token = e.split("_")[1]//n为视频分段数量//n获取方式n = v.toString(16)v = json数据表 stream 数组通过下面的m值确定格式再在对应格式内部获取segs数组的成员数//m为视频格式//m获取方式先从json数据表 stream 数组中获取 stream_type的值通过stream_type的值查询字典ll = {	flv : "flv",	mp4 : "mp4",	hd2 : "flv",	mp4hd : "mp4",	mp4hd2 : "mp4",	"3gphd" : "mp4",	"3gp" : "flv",	flvhd : "flv"}得到m值//e为视频段主要数据//o.stream_fileid 获取方式json数据表 stream 数组通过下面的m值确定格式再在对应格式内部获取stream_fileid值e  = getFileId(o.stream_fileid, v)getFileId : function (a, b) {	if (null == a || "" == a)		return "";	var c = "",	d = a.slice(0, 8),	e = b.toString(16);	1 == e.length && (e = "0" + e),	e = e.toUpperCase();	var f = a.slice(10, a.length);	return c = d + e + f}//p值//1.新算法p = h.segs[v].key;h = c.stream[a]2.旧算法p = h.key2 + h.key1//k值//先从json数据表 stream 数组中获取 stream_type的值d通过stream_type的值查询字典jk = j[d]j = {	flv : 0,	flvhd : 0,	mp4 : 1,	hd2 : 2,	"3gphd" : 1,	"3gp" : 0}//o值//o = h.segs[b].total_milliseconds_video / 1e3//YK.v.data.security.ip//json数据表 security中获取ip//t值//YK.mk.a4 = "boa4"YKP.userCache.a2 = 1s = dt = encodeURIComponent(encode64(rc4(translate(YK.mk.a4 + "poz" + YKP.userCache.a2, s).toString(), YKP.userCache.sid + "_" + e + "_" + YKP.userCache.token)));

不写完全,懂的人自然懂 ,我也避免一些不必要的麻烦微笑

你可能感兴趣的文章
报表如何自动刷新实时显示时间?
查看>>
基础005_V7-Select IO
查看>>
素数+map BestCoder Round #54 (div.2) 1002 The Factor
查看>>
P1772 [ZJOI2006]物流运输
查看>>
Release和Debug的区别[转]
查看>>
oracle11g 数据库导出报“ EXP-00003:
查看>>
机器学习 —— 基础整理(三)生成式模型的非参数方法: Parzen窗估计、k近邻估计;k近邻分类器...
查看>>
BZOJ1721 Ski Lift 缆车支柱
查看>>
发现一个开源项目-Altairis Simple ASP.NET SQL Providers
查看>>
关于Socket通讯时通讯协议的制定
查看>>
HDU-1150-MachineSchedule(二分图匹配)
查看>>
PHP session 跨子域问题总结
查看>>
C#中的抽象方法,虚方法,接口之间的对比
查看>>
计算机视觉入门 Intorduction To Computer Vision
查看>>
[LeetCode] Implement Trie (Prefix Tree)
查看>>
SharedPreferences
查看>>
HDR和bloom效果的区别和关系
查看>>
死锁概念以及预防解决方法简介 多线程上篇(八)
查看>>
oracle 新增字段
查看>>
JavaScript的原型模式
查看>>