import gzip
import json
import base64
import struct
import requests
from Crypto import Random
from Crypto.Util import Padding
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA1, HMAC
from Crypto.Cipher import AES, PKCS1_v1_5
user_id = ''#api的用户名
user_pass_word = ''#api的密码
def get_m3u8(data):
post_bytes = bytearray()
rsa_key = RSA.generate(1024)
aes_key = Random.get_random_bytes(16)
crypto = AES.new(key=aes_key, mode=AES.MODE_CBC, iv=b'12345678abcdefgh')
post_data = crypto.encrypt(Padding.pad(gzip.compress(json.dumps(data).encode()), AES.block_size))
post_bytes += struct.pack(">I", len(post_data))
post_bytes += post_data
pub_key = rsa_key.public_key().export_key("DER")
post_bytes += struct.pack(">I", len(pub_key))
for each in pub_key:
post_bytes.append(each ^ 0x36)
post_bytes += struct.pack(">I", len(aes_key))
for each in aes_key:
post_bytes.append(each ^ 0x5c)
url = 'https://www.baidu.com'#api地址,由于是隐私,就不公开了
headers = {
'X-User-Id': user_id,
'X-User-Sign': HMAC.new(user_id.encode(), post_bytes + user_pass_word.encode(), SHA1).hexdigest()
}
response = requests.post(url, data=post_bytes, headers=headers)
response = response.json()
aes_key = base64.b64decode(response['key'])
response = base64.b64decode(response['response'])
crypto = PKCS1_v1_5.new(rsa_key)
aes_key = crypto.decrypt(aes_key, b'')
crypto = AES.new(key=aes_key, mode=AES.MODE_CBC, iv=b'12345678abcdefgh')
response = json.loads(gzip.decompress(Padding.unpad(crypto.decrypt(response), AES.block_size)).decode())
print(response)
def main():
data = [
{
'url': 'xxx&part=1',
'user-agent': 'xxx',
'x-tenant-id': '10002',
'x-user-sign': 'xxx'
},
{
'url': 'xxx&part=2',
'user-agent': 'xxx',
'x-tenant-id': '10002',
'x-user-sign': 'xxx'
}
]
get_m3u8(data)
if __name__ == '__main__':
main()
python代码截图
于 2024-05-01 11:43:58 首次发布