分析优酷2016.04最新视频加密算法

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_21158419/article/details/51118506 ...
版权声明:本文为博主原创文章,未经博主允许不得转载。 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 = 4
d = [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的值查询字典l
l = {
	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的值查询字典j
k = 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 = 1
s = d
t = encodeURIComponent(encode64(rc4(translate(YK.mk.a4 + "poz" + YKP.userCache.a2, s).toString(), YKP.userCache.sid + "_" + e + "_" + YKP.userCache.token)));

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

目录
相关文章
|
13天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
40 4
|
2月前
|
人工智能 算法 BI
第一周算法设计与分析 D : 两面包夹芝士
这篇文章介绍了解决算法问题"两面包夹芝士"的方法,通过找出两个数组中的最大最小值,计算这两个值之间的整数个数,包括特判不存在整数的情况。
|
2天前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
11 0
|
8天前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
19 0
|
1月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
44 4
|
1月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
29 1
|
1月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
16天前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
21 0
|
2月前
|
算法
算法设计与分析作业
这篇文章是关于算法设计与分析的作业,其中包含了两个算法实现:一个是使用分治算法实现的十进制大整数相乘(包括加法、减法和乘法函数),并进行了正确性和健壮性测试;另一个是使用快速排序思想实现的分治查找第K小元素的程序,并分析了其平均和最坏时间复杂度。
算法设计与分析作业
|
1月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
37 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计