verifysignature,是什么意思华为u8818刷机出现lmagesignatureverifyfail?
这个提示是刷机包验证失败。 建议使用刷机工具来刷机。 这样选择的刷机包兼容性好,刷机稳定,成功率也高。 比如刷机大师、刷机精灵、甜椒刷机等等。
计算机中什么是解密算法?
1.Base64位加密(可加密解密)
最简单的加密方式,没有密钥,这种方式只要让别人拿到你的密文,就可以直接解密,只能用来迷惑,一般情况下不单独使用,因为真的并没有什么卵用~可以和其他加密方式混合起来,作为一层外部包装。
import base64
data = “abc”
#加密
m = Base64.encodestring(data)
print m #得到一个base64的值
#解密
date = Base64.decodestring(m)
2.MD5加密(加密不可逆)
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。128位长度。目前MD5是一种不可逆算法。具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。(小贴士:为啥MD5加密算法不可逆呢~ 按道理来说有加密方式,就会有解密方式呀?因为MD5加密是有种有损的加密方式,比如一段数据为’123’,我在加密的时候,遇到1和3都直接当做是a,加密后变成了’a2a’,所以解密的时候就出现了4种组合’323’‘121’‘123’‘321’,数据一多,自然找不到原始的数据了,当然这种方式加密的密文也不需要解密,需要的时候直接发送原始密文就好了~只是看不到密文原本的内容)
import hashlib
import base64
data1 = “abc”
data2 = ‘def’
hash = hashlib.md5()
#多个文件多次加密
hash.update(data1)
hash.update(data2)
value = hash.digest()
print repr(value) #得到一个二进制的字符串
print hash.hexdigest() #得到一个十六进制的字符串
print base64.encodestring(value) #得到base64的值
3.SHA1加密(加密不可逆)
SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长。它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位。因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。使用方法和MD5其实是一样的~
import hashlib
#单个文件一次加密
value = hashlib.sha1(‘This is a sha1 test!’).hexdigest()
print value #得到一个十六进制的字符串
4.AES加密(需要密钥才能解密)
AES加密为对称密钥加密,加密和解密都是用同一个解密规则,AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为状态(state),因为密钥和加密块要在矩阵上多次的迭代,置换,组合,所以对加密快和密钥的字节数都有一定的要求,AES密钥长度的最少支持为128、192、256,加密块分组长度128位。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
from Crypto.Cipher import AES
#密钥必须是16,24,32位的
key = ‘1234567890123456’
data = ‘abc’
BS = 16
#加密函数,如果text不足16位就补足为16位,
pad = lambda s: s + (BS-len(s) % BS) * chr(BS – len(s) % BS)
#加密
cipher = AES.new(key)
encrypted = cipher.encrypt(pad(m))
#解密
cipher = AES.new(key)
encrypted = cipher.decrypt(pad(m))
5.RSA加密(公钥加密,私钥解密)
它是目前最重要的加密算法!计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。甲乙双方通讯,乙方生成公钥和私钥,甲方获取公钥,并对信息加密(公钥是公开的,任何人都可以获取),甲方用公钥对信息进行加密,此时加密后的信息只有私钥才可以破解,所以只要私钥不泄漏,就能保证信息的安全性。
import rsa
//先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用
(pubkey, privkey) = rsa.newkeys(1024)
pub = pubkey.save_pkcs1()
pubfile = open(‘public.pem’,‘w+’)
pubfile.write(pub)
pubfile.close()
pri = privkey.save_pkcs1()
prifile = open(‘private.pem’,‘w+’)
prifile.write(pri)
prifile.close()
//load公钥和密钥
message = ‘hello’
with open(‘public.pem’) as publickfile:
p = publickfile.read()
pubkey = rsa.PublicKey.load_pkcs1§
with open(‘private.pem’) as privatefile:
p = privatefile.read()
privkey = rsa.PrivateKey.load_pkcs1§
//用公钥加密、再用私钥解密
crypto = rsa.encrypt(message, pubkey)
message = rsa.decrypt(crypto, privkey)
print message
//sign 用私钥签名认真、再用公钥验证签名
signature = rsa.sign(message, privkey, ‘SHA-1’)
rsa.verify(‘hello’, signature, pubkey)
怎么批量下载抖音里某个人的全部视频?
转一下啊 大神的答案
Python爬取抖音视频
请移到Python爬取抖音视频(2)
获取用户的url
创建指定文件夹
获取用户的信息
分析url下的视频连接
下载视频
一、获取用户的url连接
看的几个博客教程写的都是手机抓包来获取接口,和用户的url地址。
分享为连接形式就可以了。 获取的短连接形式:http://v.douyin.com/J2B9Sk/ 短链接会重定向到指定连接:https://www.douyin.com/share/user/57720812347?share_type=link 需要得到跳转后的连接:
# 短链接转长地址
def get_RealAddress(self, url):
if url.find(v.douyin.com) < 0:
return url
response = requests.get(
url=url, headers=self.header, allow_redirects=False) # allow_redirects = False 不允许跳转
return response.headers[Location]
1
2
3
4
5
6
7
因为在requetst.get()请求后,返回的是302,在response的headers头中会返回Location地址,这个就是重定向跳转的地址。
二、创建用户文件夹
**self.user_id:**是长连接中的/user/后面的id
# 创建对应的文件夹
def mkdir_dir(self):
current_folder = os.getcwd()
self.target_folder = os.path.join(
current_folder, download/%s % self.user_id)
if not os.path.isdir(self.target_folder):
os.mkdir(self.target_folder)
1
2
3
4
5
6
7
8
三、获取用户信息
class DouYin:
header = {
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,
accept-encoding: gzip, deflate, br,
accept-language: zh-CN,zh;q=0.9,
cache-control: max-age=0,
upgrade-insecure-requests: 1,
user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1,
}
def __init__(self, url=None):
self.url = self.get_RealAddress(url)
# 获取用户视频的url
self.user_video_url = https://www.douyin.com/aweme/v1/aweme/post/?{0}
self.user_id = re.search(ruser/(.*)\?, self.url).group(1) # 用户id
requests.packages.urllib3.disable_warnings() # 忽略SSL
self.session = requests.Session()
self.target_folder = # 创建文件的路径
self.queue = queue.Queue() # 生成一个队列对象
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
打开转换后的连接,打开Chrome的调试工具,切换到NetWork里,因为里面的内容是动态加载的Ajax,所以选择XHR,分析第一个链接的参数。
有五个参数:user_id, count, max_cursor, aid, _signature。
其中user_id,count,aid是不变的,_signature是加密的,max_cursor是response返回的json参数里面的。
所以困难是如何获取加密参数_signature。
解密js文件在后面传上去,首先安装上node.js
def user_info(self):
self.mkdir_dir()
p = os.popen(node signature.js %s % self.user_id) # 获取加密的signature
signature = p.readlines()[0]
user_video_params = {
user_id: str(self.user_id),
count: 21,
max_cursor: 0,
aid: 1128,
_signature: signature
}
1
2
3
4
5
6
7
8
9
10
11
12
四、分析url下的视频连接
# 获取下载视频的列表
def get_aweme_list(max_cursor=None):
if max_cursor:
user_video_params[max_cursor] = str(max_cursor)
user_video_url = self.user_video_url.format(
.join([key + = + user_video_params[key] for key in user_video_params])) # 拼接参数
response = requests.get(
url=user_video_url, headers=self.header, verify=False)
contentJson = json.loads(response.content.decode(utf-8)) # 将返回的进行utf8编码
aweme_list = contentJson.get(aweme_list, [])
for aweme in aweme_list:
video_name = aweme.get(
share_info, None).get(share_desc, None) # 视频的名字
video_url = aweme.get(video, None).get(play_addr, None).get(
url_list, None)[0].replace(playwm, play) # 视频链接
self.queue.put((video_name, video_url)) # 将数据进队列
if contentJson.get(has_more) == 1: # 判断后面是不是还有是1就是还有
return get_aweme_list(contentJson.get(max_cursor)) # 有的话获取参数max_cursor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
五、下载视频
# 下载视频
def get_download(self):
while True:
video_name, video_url = self.queue.get()
file_name = video_name + .mp4
file_path = os.path.join(self.target_folder, file_name)
if not os.path.isfile(file_path):
print(download %s form %s.\n % (file_name, video_url))
times = 0
while times < 10:
try:
response = requests.get(
url=video_url, stream=True, timeout=10, verify=False) # 开启流下载
with open(file_path, wb) as f:
for chunk in response.iter_content(1024): # 返回迭代对象
f.write(chunk)
print(下载成功)
break
except:
print(下载失败)
times += 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
问题:
遇到了爬取https网站报错
获取加密参数signature
以及去视频的水印将视频链接里的playwm参数替换为play就可以了
可以用多线程下载更快,因为关于I/O存取还是可以用多线程操作的。
解密的js文件:下载
代码:
import requests
import json
import re
import os
from pprint import pprint as pp
import queue
class DouYin:
header = {
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,
accept-encoding: gzip, deflate, br,
accept-language: zh-CN,zh;q=0.9,
cache-control: max-age=0,
upgrade-insecure-requests: 1,
user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1,
}
def __init__(self, url=None):
self.url = self.get_RealAddress(url)
# 获取用户视频的url
self.user_video_url = https://www.douyin.com/aweme/v1/aweme/post/?{0}
self.user_id = re.search(ruser/(.*)\?, self.url).group(1) # 用户id
requests.packages.urllib3.disable_warnings()
self.session = requests.Session()
self.target_folder = # 创建文件的路径
self.queue = queue.Queue() # 生成一个队列对象
def user_info(self):
self.mkdir_dir()
p = os.popen(node fuck.js %s % self.user_id) # 获取加密的signature
signature = p.readlines()[0]
user_video_params = {
user_id: str(self.user_id),
count: 21,
max_cursor: 0,
aid: 1128,
_signature: signature
}
# 获取下载视频的列表
def get_aweme_list(max_cursor=None):
if max_cursor:
user_video_params[max_cursor] = str(max_cursor)
user_video_url = self.user_video_url.format(
.join([key + = + user_video_params[key] for key in user_video_params])) # 拼接参数
response = requests.get(
url=user_video_url, headers=self.header, verify=False)
contentJson = json.loads(response.content.decode(utf-8)) # 将返回的进行utf8编码
aweme_list = contentJson.get(aweme_list, [])
for aweme in aweme_list:
video_name = aweme.get(
share_info, None).get(share_desc, None) # 视频的名字
video_url = aweme.get(video, None).get(play_addr, None).get(
url_list, None)[0].replace(playwm, play) # 视频链接
self.queue.put((video_name, video_url)) # 将数据进队列
if contentJson.get(has_more) == 1: # 判断后面是不是还有是1就是还有
return get_aweme_list(contentJson.get(max_cursor)) # 有的话获取参数max_cursor
get_aweme_list()
# 下载视频
def get_download(self):
while True:
video_name, video_url = self.queue.get()
file_name = video_name + .mp4
file_path = os.path.join(self.target_folder, file_name)
if not os.path.isfile(file_path):
print(download %s form %s.\n % (file_name, video_url))
times = 0
while times < 10:
try:
response = requests.get(
url=video_url, stream=True, timeout=10, verify=False) # 开启流下载
with open(file_path, wb) as f:
for chunk in response.iter_content(1024): # 返回迭代对象
f.write(chunk)
print(下载成功)
break
except:
print(下载失败)
times += 1
# 创建对应的文件夹
def mkdir_dir(self):
current_folder = os.getcwd()
self.target_folder = os.path.join(
current_folder, download/%s % self.user_id)
if not os.path.isdir(self.target_folder):
os.mkdir(self.target_folder)
# 短链接转长地址
def get_RealAddress(self, url):
if url.find(v.douyin.com) < 0:
return url
response = requests.get(
url=url, headers=self.header, allow_redirects=False) # allow_redirects 允许跳转
return response.headers[Location]
if __name__ == __main__:
douyin = DouYin(url=http://v.douyin.com/J2B9Sk/)
douyin.user_info()
douyin.get_download()
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
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
———————
作者:胡文博
来源:CSDN
原文:https://blog.csdn.net/qq_1290259791/article/details/80903220
版权声明:本文为博主原创文章,转载请附上博文链接!
Python爬取抖音视频(2)
最近看到之前写的抖音爬虫失效了,其实方法还能用,只是多了一个参数而已,直接从页面获取就可以了。
之前看到一个获取视频列表不用加密参数_signature,的链接。
下载的视频还是去水印版本的。
不用_signature参数来获取视频列表。
增加了dytk参数。
主要使用协程来加速下载
协程的教程:链接
获取用户的url链接
模拟请求,直接获取dytk参数、id参数
构建获取视频url地址参数,https://www.amemv.com这个域名下的请求不需要_signature
然后就是下载视频了。
# -*- coding: utf-8 -*-
# File : douyin.py
# Author: HuWenBo
# Date : 2018/10/26
# 使用协程爬取抖音个人下的所有视频
import os
import requests
import re
import sys
import asyncio
import aiohttp
headers = {
user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko)
Version/11.0 Mobile/15A372 Safari/604.1
}
VIDEO_URLS, PAGE = [], 1
def get_info(url):
:param url: 用户的链接
:return:返回name,dytk,user_id 参数
name = None
dytk = None
user_id = None
try:
response = requests.get(url, headers=headers)
user_id = response.url.split(/)[5].split(?)[0]
name = re.search(rclass=nickname>(.*?)<, response.text)[1]
dytk = re.search(rdytk: (.*?), response.text)[1]
except (TypeError, IndexError):
sys.stdout.write(Waring:输入的链接错误)
except requests.exceptions:
sys.stdout.write(Waring:链接错误)
finally:
return name, user_id, dytk
def make_dir(name):
建立文件夹
:param name: 用户名称
:return:
if not os.path.isdir(name):
os.mkdir(name)
else:
pass
def get_all_video(user_id, max_cursor, dytk):
获取视频的地址
:param user_id:
:param max_cursor:
:param dytk:
:return:
url = https://www.amemv.com/aweme/v1/aweme/post/?
params = {user_id: user_id,
count: 21,
max_cursor: max_cursor,
dytk: dytk}
try:
response = requests.get(url=url, params=params, headers=headers)
if response.status_code == 200:
datas = response.json()
for data in datas[aweme_list]:
name = data.get(share_info).get(share_desc)
url = data.get(video).get(play_addr).get(url_list)[0].replace(playwm, play)
VIDEO_URLS.append([name, url])
if datas[has_more] == 1 and datas.get(max_cursor) != 0:
global PAGE
print(f收集第{PAGE}页视频)
PAGE += 1
return get_all_video(user_id, datas.get(max_cursor), dytk)
else:
print(收集完成)
return VIDEO_URLS
else:
print(状态码:, response.status_code)
return None
except Exception as e:
print(Waring:, e)
return
async def download_video(index, name, video_name, url):
下载视频
:param index: 视频id
:param name: 用户名称
:param video_name: 视频名称
:param url: 下载url
:return:
print(f正在下载第{index}个视频:{video_name})
video_path = {}/{}.mp4.format(name, video_name)
if not os.path.isfile(video_path):
try:
async with aiohttp.ClientSession() as session:
async with session.get(url=url, headers=headers, ssl=False) as response:
with open(video_path, wb) as f:
while True:
chunk = await response.content.read(1024)
f.write(chunk)
if not chunk:
break
print(f下载完成第{index}个视频:{video_name})
except Exception as e:
print(waring:download faild, video_name, e)
return
else:
print(文件已存在)
def main():
url = http://v.douyin.com/dEorkn/
name, user_id, dytk = get_info(url)
if not (name, user_id, dytk):
return
make_dir(name)
get_all_video(user_id, 0, dytk)
print(f{name}:总共有{len(VIDEO_URLS)}个视频)
tasks = []
for index, item in enumerate(VIDEO_URLS, 1):
video_name = item[0]
url = item[1]
tasks.append(asyncio.ensure_future(download_video(index, name, video_name, url)))
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.run_until_complete(asyncio.sleep(0))
loop.close()
print(f{name}视频下载完成!)
if __name__ == __main__:
main()
———————
作者:胡文博
来源:CSDN
原文:https://blog.csdn.net/qq_1290259791/article/details/83423001
版权声明:本文为博主原创文章,转载请附上博文链接!
进入recovery时出现image?
第一步:格式化TF卡格式为FAT32格式,其他格式可能会造成粉屏。第二步:下载官方的rom(已上传了)
第三步:解压文件夹dload到TF卡更目录中(里面只有一个APP文件),插入手机中同时按下音量加减和开机键进入更新,等待重启。
我开机的时候老说我TOKENMGRDLL没了?
别紧张 这是某个程序所调用的动态链接不见了,你呢在开始·运行·输入 msconfig 然后在启动 那一项 除了杀毒软件 360安全卫士 ctfmon 这3个 别的项目前面的勾勾去掉 重启