• 周一. 5 月 13th, 2024

verifysignature(是什么意思华为u8818刷机出现lmagesignatureveri

admin

4 月 28, 2024 #出轨恋爱技巧

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个 别的项目前面的勾勾去掉 重启