关于加密解密:加解密概要
单项散列算法MD5SHASM3(国产哈希算法)对称加密RC4(速度达DES的10倍)(最平安之一)TEA(分组加密算法)IDEA(基于DES)(美国之外)BlowFish(对称加密块算法)AES(代替原先的DES)SM4分组明码(中国政府采纳的分组明码规范)非对称加密(公钥私钥)RSAElGamal公钥算法(国内公认较现实的公钥明码体制)DSA数字签名椭圆曲线明码编码学SMI算法(国密局,是椭圆曲线公钥明码算法,较RSA先进)
单项散列算法MD5SHASM3(国产哈希算法)对称加密RC4(速度达DES的10倍)(最平安之一)TEA(分组加密算法)IDEA(基于DES)(美国之外)BlowFish(对称加密块算法)AES(代替原先的DES)SM4分组明码(中国政府采纳的分组明码规范)非对称加密(公钥私钥)RSAElGamal公钥算法(国内公认较现实的公钥明码体制)DSA数字签名椭圆曲线明码编码学SMI算法(国密局,是椭圆曲线公钥明码算法,较RSA先进)
指标APP:91短视频 之前发过一篇蚂蚁加速器刷邀请的文章,这次的APP就是和蚂蚁加速器一家的,加密算法根本一样,不提供下载。0x00 工具筹备Fiddler(代理抓包)Xposed(hook框架) Inspeckage(通用hook插件,备选算法助手)HEX编码转换(base64转HEX)雷电模拟器(雷电3绿化版)ProxyDroid(代理转发工具,用Gitee一键编译的)工具安装包及配置好的雷电模拟器零碎备份下载:https://lanzoui.com/b0eknupng 明码:4vpf各工具应用办法介绍等具体内容可参考各自文档或百度。 0x01 现实的剖析过程新建模拟器,装置好指标APP及工具,先不要关上指标APP。 1、用ProxyDroid解决抓不到包的问题关上ProxyDroid按下图示例填好代理服务器IP、端口,协定选HTTP(就算抓HTTPS,也选HTTP) 下滑能够抉择用全局代理还是分利用代理,这里间接全局代理了。 代理服务器IP、端口为Fiddler中的代理,默认8888端口,IP为局域网IP,在Fiddler右上角有如下所示的图标,能够在下面悬停鼠标,就会显示局域网地址,个别为192.168..。 2、用Inspeckage主动hook加密算法及hash关上Inspeckage,抉择指标APP,界面如下。 依据图中提醒转发8008端口到电脑,即在模拟器运行目录下关上cmd,再输出: '''adb forward tcp:8008 tcp:8008''' 此时在电脑浏览器中关上http://127.0.0.1:8008/即可看到Inspeckage网页界面。 点开设置,将不须要的都关掉,只留Crypto和Hash两个,关上主动刷新。 3、开始剖析工具都配置好后,关上指标APP,直到胜利绑定邀请码。(或者在开屏广告停留一下,查看Inspeckage的Crypto,出后果后敞开主动刷新,因为不晓得为什么这里会主动革除记录,偏偏刚启动会有个注册的包要用到。) 分析方法是依据Fiddler中数据包参数去Inspeckage中寻找对应的加解密输入输出。 点开绑定邀请码的包,绑定邀请码的时候看着Fiddler,很好确定是哪个包,不出意外的话就是指标域名在Fiddler中最下方倒数第二个。能够看到发送参数有3个,一个工夫戳,一个HEX格局的data,一个MD5的sign。在Inspeckage的Crypto中搜寻本人输出的邀请码,没搜到就把折叠起来的加密数据点开再搜,明文在前的是加密,base64在前的是解密。这里能够确定: 加密算法是AES,key是h3PV8o444kNybrx77icyiriQ2q0uTjqUSsFRfaynkT8=(base64编码),iv是DrRMfzwgpjgI1sIjfW8aXw==(base64编码),解密模式是AES/CFB/NoPadding,加密数据格式为{"mod":"user","build_id":"a1000","token":"","oauth_id":"xxxxx","oauth_type":"android","aff":"xxxxx","app_status":"xxxx:2","version":"4.5.5","apiV2":"v2","app_type":"local","code":"invitation"}把加密后果用HEX编码转换转为HEX,发现和data中去除前32个字符之后对的上。依据上一篇文章的教训,这32个字符应该是IV。把刚刚失去的iv即DrRMfzwgpjgI1sIjfW8aXw==转为HEX,发现正好和data前32位相等。这里能够确定:发送的data是iv与加密数据的HEX编码拼接而成。再用同样的办法,去Hash界面中搜抓到的sign,能够看到是一长串hash进行MD5加密。持续搜这一长串hash,发现正好是上面一条SHA256加密的后果。加密字符串格局为data={}xtamp={}132f1537f85sjdpcm59f7e318b9epa51这时候拿去验证SHA256,发现后果对不上。认真看一下,发现timestamp没齐全显示,预计出了点问题,手动补全为data={}×tamp={}132f1537f85sjdpcm59f7e318b9epa51,再次验证发现没问题了。加密的数据曾经差不多弄清楚了,那返回的data解密应该也是一样的。将后面失去的key和iv拿去解密,发现不对。这个时候依据后面的教训,猜想返data也是前32位为iv,前面为待解密数据,一试发现果然如此。因为各种AES加解密工具都把输入输出格局固定死了,很少有反对HEX或base64编码的输出以及key、iv,所以倡议写代码验证或者应用其余工具,或者手动转换编码再去用工具验证,这里是将待解密数据[HEX转为base64][],将key、iv转为HEX,再用工具验证到这里只看了绑定邀请码的包,当初再去看看注册的包,毕竟不注册没方法刷邀请。依据Fiddler中先后顺序,顺次将发包的data解密查看,后果没有发现注册字样,且多个data完全相同。所以能够猜想,要么是没抓到注册包,要么是这些数据包主动实现了注册。剖析局部到这里就能够完结了,有key、有iv、有加解密数据模板、有sign模板,能够间接写代码了。 4、怎么全是猜想?看到这里,我也纳闷,怎么都是猜的,间接剖析能猜到这些吗? 预计还真不好猜。 因为理论剖析过程并不是这么顺利,所以两头反编译看了源码,同时联合上一次剖析蚂蚁加速器的教训,所以很多货色都一眼看进去了,这两个APP加密基本相同。 如果有切实看不明确怎么猜到的,看一看上一篇蚂蚁加速器刷邀请的文章,外面有反编译剖析的局部。 0x02 理论剖析过程这里应用雷电3,即安卓5,因为安卓7装置证书麻烦。绿化版来自派大星模拟器多开助手网站。 开局先抓包,关上Fiddler、模拟器中设置好代理、装置证书、关上APP。 一顿操作猛如虎,一看后果啥也没有,而且APP能失常关上失常应用。这时候就能够猜想,APP禁用了代理。 个别防抓包措施自行理解。抓不到包的时候,如果APP闪退或者不能拜访网络,则有可能是检测了代理;如果APP失常应用,那应该是禁用了代理。 这里能够应用抓包精灵、小黄鸟等手机端的抓包工具,或者用代理工具转发流量到Fiddler,因为手机端不不便操作,所以这里用ProxyDroid来转发流量。 用其余工具能够,比方Drony、Postern、socksdroid,不过我举荐用ProxyDroid,代理模式齐全,设置过程简略明确。 用了代理工具,后果还是没有抓到想要的包,有点不对劲,我开始狐疑它不是HTTP协定,可能用了ws或者tcp。 这里就没脉络了,所以只能去看Inspeckage的后果,而后反编译(没加壳)找算法,找半天找到了。这个时候能够用frida取hook到后果了,然而我还是想试试能不能抓到包。 之后陆续尝试了用Inspeckage增加代理、用socks代理,都没胜利。 最初无心中发现,新建模拟器后第一次关上这个APP的时候用ProxyDroid能够抓到包,之后测试屡次,无论什么姿态,除了第一次关上之外都抓不到包,难道除了第一次之外都改用了tcp? 不过好在还是抓到了包,这时候联合Inspeckage中hook到的加密算法和hash,就能够拼接出申请的数据包了,详情见上方。 还是想不通为什么,心愿有晓得的大佬能解惑。 Python代码# -*- encoding: utf-8 -*-'''@File : 91.py@Time : 2022年01月04日 20:24:32 星期二@Author : erma0@Version : 1.0@Link : https://erma0.cn@Desc : 91短视频刷邀请'''import requestsimport timeimport jsonfrom base64 import b64decodefrom hashlib import sha256, md5from Crypto.Cipher import AESfrom Crypto.Random import get_random_bytes# from Crypto.Hash import SHA256, MD5 # 和hashlib库一样class Aff(object): """ 91短视频刷邀请 """ def __init__(self, aff: str = "gcKyA"): self.aff = aff self.oauth_id = '' self.timestamp = '' self.url = 'http://api.91apiapi.com/api.php' # self.url = 'http://v2.my10api.com:8080/api.php' self.headers = { # 加不加header都能够 'Accept-Language': 'zh-CN,zh;q=0.8', 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; M973Q Build/LMY49I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', 'Content-Type': 'application/x-www-form-urlencoded' } # self.b64key = 'h3PV8o444kNybrx77icyiriQ2q0uTjqUSsFRfaynkT8=' # self.b64iv = 'DrRMfzwgpjgI1sIjfW8aXw==' self.key = b64decode('h3PV8o444kNybrx77icyiriQ2q0uTjqUSsFRfaynkT8=') self.iv = b64decode('DrRMfzwgpjgI1sIjfW8aXw==') @staticmethod def get_timestamp(long: int = 10): """ 取工夫戳,默认10位 """ return str(time.time_ns())[:long] def decrypt(self, data: str): """ aes解密 """ ct_iv = bytes.fromhex(data[:32]) ct_bytes = bytes.fromhex(data[32:]) ciper = AES.new(self.key, AES.MODE_CFB, iv=ct_iv, segment_size=128) # CFB模式,iv指定,块大小为128(默认为8,需填8的倍数,貌似AES规范区块大小就是128,和密钥大小128/192/256无关) plaintext = ciper.decrypt(ct_bytes) return plaintext.decode() def encrypt(self, data: str): """ aes加密 """ ciper = AES.new(self.key, AES.MODE_CFB, iv=self.iv, segment_size=128) ct_bytes = self.iv + ciper.encrypt(data.encode()) # iv+加密后果合并 return ct_bytes.hex().upper() # hex编码 def get_sign(self): """ 生成sign """ template = 'data={}×tamp={}132f1537f85sjdpcm59f7e318b9epa51'.format( self.encrypt_data, self.timestamp) # sha256 sha = sha256() sha.update(template.encode()) res = sha.hexdigest() # md5 m = md5() m.update(res.encode()) res = m.hexdigest() return res def request(self, d: dict): """ 申请封包 """ plaintext = { "build_id": "a1000", "token": "", "oauth_type": "android", "app_status": "A72B8E7B0E661AAEEB5280AAC3993DC6F4A2D8C0:2", "version": "4.5.5", "apiV2": "v2", "app_type": "local" } d.update(plaintext) self.timestamp = self.get_timestamp(10) self.encrypt_data = self.encrypt(json.dumps(d, separators=(',', ':'))) sign = self.get_sign() data = {"timestamp": self.timestamp, "data": self.encrypt_data, "sign": sign} res = requests.post(url=self.url, data=data, headers=self.headers) resj = res.json() res = self.decrypt(resj.get('data')) print(res) return res def get_user(self): """ 生成新用户 """ # 取随机md5 m = md5() m.update(get_random_bytes(16)) oauth_id = m.hexdigest() data = {"mod": "system", "oauth_id": oauth_id, "code": "index"} self.request(data) self.oauth_id = oauth_id print(oauth_id) def invite(self): """ 刷邀请,邀请码:self.aff """ self.get_user() data = {"mod": "user", "oauth_id": self.oauth_id, "aff": self.aff, "code": "invitation"} self.request(data)if __name__ == "__main__": aff = Aff('gcKyA') aff.invite() # data = 'x' # print(aff.decrypt(data))
指标APP:91短视频 之前发过一篇蚂蚁加速器刷邀请的文章,这次的APP就是和蚂蚁加速器一家的,加密算法根本一样,不提供下载。0x00 工具筹备Fiddler(代理抓包)Xposed(hook框架) Inspeckage(通用hook插件,备选算法助手)HEX编码转换(base64转HEX)雷电模拟器(雷电3绿化版)ProxyDroid(代理转发工具,用Gitee一键编译的)工具安装包及配置好的雷电模拟器零碎备份下载:https://lanzoui.com/b0eknupng 明码:4vpf各工具应用办法介绍等具体内容可参考各自文档或百度。 0x01 现实的剖析过程新建模拟器,装置好指标APP及工具,先不要关上指标APP。 1、用ProxyDroid解决抓不到包的问题关上ProxyDroid按下图示例填好代理服务器IP、端口,协定选HTTP(就算抓HTTPS,也选HTTP) 下滑能够抉择用全局代理还是分利用代理,这里间接全局代理了。 代理服务器IP、端口为Fiddler中的代理,默认8888端口,IP为局域网IP,在Fiddler右上角有如下所示的图标,能够在下面悬停鼠标,就会显示局域网地址,个别为192.168..。 2、用Inspeckage主动hook加密算法及hash关上Inspeckage,抉择指标APP,界面如下。 依据图中提醒转发8008端口到电脑,即在模拟器运行目录下关上cmd,再输出: adb forward tcp:8008 tcp:8008此时在电脑浏览器中关上http://127.0.0.1:8008/即可看到Inspeckage网页界面。 点开设置,将不须要的都关掉,只留Crypto和Hash两个,关上主动刷新。 3、开始剖析工具都配置好后,关上指标APP,直到胜利绑定邀请码。(或者在开屏广告停留一下,查看Inspeckage的Crypto,出后果后敞开主动刷新,因为不晓得为什么这里会主动革除记录,偏偏刚启动会有个注册的包要用到。) 分析方法是依据Fiddler中数据包参数去Inspeckage中寻找对应的加解密输入输出。 点开绑定邀请码的包,绑定邀请码的时候看着Fiddler,很好确定是哪个包,不出意外的话就是指标域名在Fiddler中最下方倒数第二个。能够看到发送参数有3个,一个工夫戳,一个HEX格局的data,一个MD5的sign。在Inspeckage的Crypto中搜寻本人输出的邀请码,没搜到就把折叠起来的加密数据点开再搜,明文在前的是加密,base64在前的是解密。这里能够确定: 加密算法是AES,key是h3PV8o444kNybrx77icyiriQ2q0uTjqUSsFRfaynkT8=(base64编码),iv是DrRMfzwgpjgI1sIjfW8aXw==(base64编码),解密模式是AES/CFB/NoPadding,加密数据格式为{"mod":"user","build_id":"a1000","token":"","oauth_id":"xxxxx","oauth_type":"android","aff":"xxxxx","app_status":"xxxx:2","version":"4.5.5","apiV2":"v2","app_type":"local","code":"invitation"}把加密后果用HEX编码转换转为HEX,发现和data中去除前32个字符之后对的上。依据上一篇文章的教训,这32个字符应该是IV。把刚刚失去的iv即DrRMfzwgpjgI1sIjfW8aXw==转为HEX,发现正好和data前32位相等。这里能够确定:发送的data是iv与加密数据的HEX编码拼接而成。再用同样的办法,去Hash界面中搜抓到的sign,能够看到是一长串hash进行MD5加密。持续搜这一长串hash,发现正好是上面一条SHA256加密的后果。加密字符串格局为data={}xtamp={}132f1537f85sjdpcm59f7e318b9epa51这时候拿去验证SHA256,发现后果对不上。认真看一下,发现timestamp没齐全显示,预计出了点问题,手动补全为data={}×tamp={}132f1537f85sjdpcm59f7e318b9epa51,再次验证发现没问题了。加密的数据曾经差不多弄清楚了,那返回的data解密应该也是一样的。将后面失去的key和iv拿去解密,发现不对。这个时候依据后面的教训,猜想返data也是前32位为iv,前面为待解密数据,一试发现果然如此。因为各种AES加解密工具都把输入输出格局固定死了,很少有反对HEX或base64编码的输出以及key、iv,所以倡议写代码验证或者应用其余工具,或者手动转换编码再去用工具验证,这里是将待解密数据[HEX转为base64][],将key、iv转为HEX,再用工具验证到这里只看了绑定邀请码的包,当初再去看看注册的包,毕竟不注册没方法刷邀请。依据Fiddler中先后顺序,顺次将发包的data解密查看,后果没有发现注册字样,且多个data完全相同。所以能够猜想,要么是没抓到注册包,要么是这些数据包主动实现了注册。剖析局部到这里就能够完结了,有key、有iv、有加解密数据模板、有sign模板,能够间接写代码了。 4、怎么全是猜想?看到这里,我也纳闷,怎么都是猜的,间接剖析能猜到这些吗? 预计还真不好猜。 因为理论剖析过程并不是这么顺利,所以两头反编译看了源码,同时联合上一次剖析蚂蚁加速器的教训,所以很多货色都一眼看进去了,这两个APP加密基本相同。 如果有切实看不明确怎么猜到的,看一看上一篇蚂蚁加速器刷邀请的文章,外面有反编译剖析的局部。 0x02 理论剖析过程这里应用雷电3,即安卓5,因为安卓7装置证书麻烦。绿化版来自派大星模拟器多开助手网站。 开局先抓包,关上Fiddler、模拟器中设置好代理、装置证书、关上APP。 一顿操作猛如虎,一看后果啥也没有,而且APP能失常关上失常应用。这时候就能够猜想,APP禁用了代理。 个别防抓包措施自行理解。抓不到包的时候,如果APP闪退或者不能拜访网络,则有可能是检测了代理;如果APP失常应用,那应该是禁用了代理。 这里能够应用抓包精灵、小黄鸟等手机端的抓包工具,或者用代理工具转发流量到Fiddler,因为手机端不不便操作,所以这里用ProxyDroid来转发流量。 用其余工具能够,比方Drony、Postern、socksdroid,不过我举荐用ProxyDroid,代理模式齐全,设置过程简略明确。 用了代理工具,后果还是没有抓到想要的包,有点不对劲,我开始狐疑它不是HTTP协定,可能用了ws或者tcp。 这里就没脉络了,所以只能去看Inspeckage的后果,而后反编译(没加壳)找算法,找半天找到了。这个时候能够用frida取hook到后果了,然而我还是想试试能不能抓到包。 之后陆续尝试了用Inspeckage增加代理、用socks代理,都没胜利。 最初无心中发现,新建模拟器后第一次关上这个APP的时候用ProxyDroid能够抓到包,之后测试屡次,无论什么姿态,除了第一次关上之外都抓不到包,难道除了第一次之外都改用了tcp? 不过好在还是抓到了包,这时候联合Inspeckage中hook到的加密算法和hash,就能够拼接出申请的数据包了,详情见上方。 还是想不通为什么,心愿有晓得的大佬能解惑。 Python代码# -*- encoding: utf-8 -*-'''@File : 91.py@Time : 2022年01月04日 20:24:32 星期二@Author : erma0@Version : 1.0@Link : https://erma0.cn@Desc : 91短视频刷邀请'''import requestsimport timeimport jsonfrom base64 import b64decodefrom hashlib import sha256, md5from Crypto.Cipher import AESfrom Crypto.Random import get_random_bytes# from Crypto.Hash import SHA256, MD5 # 和hashlib库一样class Aff(object): """ 91短视频刷邀请 """ def __init__(self, aff: str = "gcKyA"): self.aff = aff self.oauth_id = '' self.timestamp = '' self.url = 'http://api.91apiapi.com/api.php' # self.url = 'http://v2.my10api.com:8080/api.php' self.headers = { # 加不加header都能够 'Accept-Language': 'zh-CN,zh;q=0.8', 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; M973Q Build/LMY49I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', 'Content-Type': 'application/x-www-form-urlencoded' } # self.b64key = 'h3PV8o444kNybrx77icyiriQ2q0uTjqUSsFRfaynkT8=' # self.b64iv = 'DrRMfzwgpjgI1sIjfW8aXw==' self.key = b64decode('h3PV8o444kNybrx77icyiriQ2q0uTjqUSsFRfaynkT8=') self.iv = b64decode('DrRMfzwgpjgI1sIjfW8aXw==') @staticmethod def get_timestamp(long: int = 10): """ 取工夫戳,默认10位 """ return str(time.time_ns())[:long] def decrypt(self, data: str): """ aes解密 """ ct_iv = bytes.fromhex(data[:32]) ct_bytes = bytes.fromhex(data[32:]) ciper = AES.new(self.key, AES.MODE_CFB, iv=ct_iv, segment_size=128) # CFB模式,iv指定,块大小为128(默认为8,需填8的倍数,貌似AES规范区块大小就是128,和密钥大小128/192/256无关) plaintext = ciper.decrypt(ct_bytes) return plaintext.decode() def encrypt(self, data: str): """ aes加密 """ ciper = AES.new(self.key, AES.MODE_CFB, iv=self.iv, segment_size=128) ct_bytes = self.iv + ciper.encrypt(data.encode()) # iv+加密后果合并 return ct_bytes.hex().upper() # hex编码 def get_sign(self): """ 生成sign """ template = 'data={}×tamp={}132f1537f85sjdpcm59f7e318b9epa51'.format( self.encrypt_data, self.timestamp) # sha256 sha = sha256() sha.update(template.encode()) res = sha.hexdigest() # md5 m = md5() m.update(res.encode()) res = m.hexdigest() return res def request(self, d: dict): """ 申请封包 """ plaintext = { "build_id": "a1000", "token": "", "oauth_type": "android", "app_status": "A72B8E7B0E661AAEEB5280AAC3993DC6F4A2D8C0:2", "version": "4.5.5", "apiV2": "v2", "app_type": "local" } d.update(plaintext) self.timestamp = self.get_timestamp(10) self.encrypt_data = self.encrypt(json.dumps(d, separators=(',', ':'))) sign = self.get_sign() data = {"timestamp": self.timestamp, "data": self.encrypt_data, "sign": sign} res = requests.post(url=self.url, data=data, headers=self.headers) resj = res.json() res = self.decrypt(resj.get('data')) print(res) return res def get_user(self): """ 生成新用户 """ # 取随机md5 m = md5() m.update(get_random_bytes(16)) oauth_id = m.hexdigest() data = {"mod": "system", "oauth_id": oauth_id, "code": "index"} self.request(data) self.oauth_id = oauth_id print(oauth_id) def invite(self): """ 刷邀请,邀请码:self.aff """ self.get_user() data = {"mod": "user", "oauth_id": self.oauth_id, "aff": self.aff, "code": "invitation"} self.request(data)if __name__ == "__main__": aff = Aff('gcKyA') aff.invite() # data = 'x' # print(aff.decrypt(data))
视频加密个别分为加密和解密播放两局部,加密的作用是对视频进行非凡解决,个别是在本地实现的,不须要网络。而播放的话,是须要联网验证还是离线激活后播放,其实是看具体的应用场景去设计加解密逻辑。比方一些学校、医院等特定场景下网络是局域网,这种个别须要离线形式解密播放,比方通过设施的机器码来受权特定的激活秘匙。
随着在线教育、企业培训、原创视频爱护、单位机构外部课程、私人影咖等的倒退,对于视频创作者来说也越来越重视视频的安全性和严密性,视频加密软件的开发就施展了重要的作用。 在加密过程中会遇到一些问题如:操作是否简略快捷?实用于哪些终端?必须要在联网的场景下应用吗?能够多个设施应用吗? 就以上问题来说视频加密软件场景应用问题是最常见也比拟受关注的一个问题,因为在应用过程中可能遇到如:网络环境差连不上网,所以就会导致用户体验成果差。点盾云加密零碎因而推出了离线激活、联网预创立激活和联网主动申请激活三种模式。 一.预创立模式1.实用于用户可联网场景,激活码在后盾可控,可随时召回,召回后用户无奈观看视频;2、商家可事后批量创立激活码,一个激活码对应一个用户,用户首次观看视频时需输出激活码激活能力观看,激活的同时激活码和机器码实现绑定过程;3、一个激活码可受权用户的在指定数量的播放设施上应用(扣除多个激活码点数),超过指定日期、指定次数或指定设施后,用户需从新获取激活码;4、激活过的加密视频容许离线播放10次,10次后须要从新联网验证无效信息; 二.预申请模式1、实用于用户可联网场景,激活码在后盾可控,可随时召回,召回后用户无奈观看视频;2、商家的视频可提供给未知的用户进行观看,用户首次观看时需输出商家要求的信息而后申请播放,商家在后盾进行审核,审核通过后用户可间接观看视频;3、激活码主动和设施绑定无需发放过程,超过指定日期或指定次数后,用户需从新申请;4、也可容许用户在无奈联网的环境下观看视频10次,离线观看超过规定次数后须从新联网后才可持续观看; 三.离线版1、实用于用户无奈联网的场景;2、用户首次观看加密视频,需将由播放器主动获取的机器码发给商家;3、商家依据机器码在后盾创立对应的激活码,发给用户,用于激活播放;4、该激活码只能在对应设施上应用,超过指定日期或指定次数后,用户需从新分割商家获取激活码 这三种模式可能无效的保障在不同环境下都能够操作,大大晋升了用户的应用感。但要留神的是一个手机号只能注册一种受权形式。所以也能够依据对方的状况来抉择。
上周,咱们介绍了即构新推出的自研互动白板,依靠成熟的亿级用户实时信令网络,即构互动白板具备“音视频实时同步、百人实时在线合作、跨国跨网无差别体验”等独特劣势。 咱们提供了互动白板的体验APP,扫描下方二维码,即可获取iOS、Android、Web三个端的下载地址,大家能够亲自感触即构互动白板的应用成果: 课件数据安全是教育平台在白板选型时的重点关注因素,那么,如何保障白板分享时课件数据的安全性呢?基于在音视频、信令服务近20年的技术积攒,上面咱们将分享即构互动白板在解决数据安全难点的计划及技术实际。 随着教育行业竞争的加剧,越来越多的教育平台投入大量的人力物力进行课程研发,因此这些外围课件数据的爱护非常重要。教育平台在抉择白板互动厂商时,往往更关注教学过程中的课件平安问题,包含课件的防被盗、防失落,防损坏等。 即构依据白板文件共享的整体流程,从文件存储、拜访、业务等多方面保障数据的安全性。 存储平安 咱们次要从以下两方面来保障存储的安全性: 加密存储无论是原课件还是转码后的文件,都先通过加密解决后再进行存储,确保文件自身的加密平安,内容不透露。 备份容灾基于云服务厂商提供的备份容灾能力,确保课件存储的可靠性。 拜访平安 咱们通过双重验证来保障文件拜访的安全性: 文档服务反对对拜访课件的申请进行auth key验证,只有验证通过能力获取到课件的相干信息,如存储信息等。基于云服务厂商提供的对课件的鉴权拜访。业务平安 通过采纳转码业务与存储相拆散设计,把存储变成独立模块,反对第三方存储接入。客户能够仅应用即构的转码服务,而应用本人的存储服务,打消客户对外围课件资源的安全性顾虑。 通过对课件上传、转码、存储、散发、下载的整个链路的进行加密、鉴权,保障客户的课件平安,为客户的外围课件数据保驾护航。