这个是我根据以前的旧版修改的,目前可用,我的打算是,将新代码,里面的一些函数代码分享出来,并进行基础解释,让更多人看到,进而促进这个脚本的多元化。文章最下放入了运行测试成果图
pwd DES 加密
def des_pwd(msg, key):
des_obj = des(key, key, pad=None, padmode=PAD_PKCS5)
secret_bytes = des_obj.encrypt(msg, padmode=PAD_PKCS5)
return binascii.b2a_hex(secret_bytes)
注释:
这段代码定义了一个名为des_pwd的函数,用于进行DES加密。
具体来说,函数接受两个参数:msg和key。其中,msg表示要加密的消息,key表示加密使用的密钥。
在函数内部,首先创建了一个DES对象des_obj,使用给定的key作为加密算法的密钥,并指定不使用填充模式(pad=None),以及使用PKCS5填充模式(padmode=PAD_PKCS5)。
接着,调用des_obj对象的encrypt方法对消息进行加密,并将加密后得到的二进制数据secret_bytes保存下来。
最后,将secret_bytes转换为十六进制字符串,并将其作为函数的返回值。
视频任务enc校验计算
def encode_enc(clazzid: str, duration: int, objectId: str, otherinfo: str, jobid: str, userid: str, currentTimeSec: str):
import hashlib
data = "[{0}][{1}][{2}][{3}][{4}][{5}][{6}][0_{7}]".format(clazzid, userid, jobid, objectId, int(currentTimeSec) * 1000, "d_yHJ!$pdA~5", duration * 1000, duration)
print(data)
return hashlib.md5(data.encode()).hexdigest()
注释:
这段代码定义了一个名为encode_enc的函数,用于计算视频任务的enc校验值。
具体来说,函数接受7个参数:clazzid、duration、objectId、otherinfo、jobid、userid和currentTimeSec。其中,前5个参数分别表示班级ID、视频时长、对象ID、其他信息、作业ID和用户ID;最后一个参数currentTimeSec表示当前时间(以秒为单位)。
在函数内部,首先使用format方法将各个参数格式化成一个字符串data。其中,clazzid、userid、jobid、objectId和duration被直接拼接到字符串中,而currentTimeSec则先乘以1000再转换为字符串,并在前面添加”0_”前缀。另外,字符串”d_yHJ!$pdA~5″也被添加到data中。
接下来,将data字符串编码为二进制数据,并使用hashlib库中的md5方法计算其MD5哈希值。最后,将哈希值转换为十六进制字符串,并将其作为函数的返回值。
在这个函数中,duration参数没有参与MD5哈希计算的原因是因为它被转换成了毫秒数,并与其他数据一起拼接到了字符串data中。具体来说,在格式化字符串data时,将duration乘以1000后的值作为固定字符串”d_yHJ!$pdA~5″的一部分进行了拼接。由于这个固定字符串的长度为10个字符,而duration转换为毫秒数后最多只有6位数字,因此可以确保duration不会对MD5哈希计算产生影响。
需要注意的是,在进行哈希计算时,需要将所有数据都转换为相同的长度进行计算。如果某个数据的长度与其他数据不同,就需要对其进行处理或转换,以保证所有数据都可以正确地参与哈希计算。在这个例子中,由于duration已经被转换成了毫秒数,并且长度与固定字符串的长度相同,因此可以直接将其拼接到字符串data中进行哈希计算。
#手机号登录,返回response
def sign_in(uname: str, password: str):
sign_in_url = "*******"
sign_in_data = "******".format(uname, des_pwd(password, "u2oh6Vu^").decode('utf-8'))
sign_in_headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Content-Length': '98',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'route=3744838b34ea6b4834cd438e19ed44f0; JSESSIONID=9CD969F9C1B9633A46EAD7880736DD51; fanyamoocs=11401F839C536D9E; fid=314; isfyportal=1; ptrmooc=t',
'Host': 'passport2.chaoxing.com',
'Origin': 'https://passport2.chaoxing.com',
'Referer': 'https://passport2.chaoxing.com/login?loginType=4&fid=314&newversion=true&refer=http://i.mooc.chaoxing.com',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Edg/85.0.564.51',
'X-Requested-With': 'XMLHttpRequest'
}
sign_in_rsp = requests.post(url=sign_in_url, data=sign_in_data, headers=sign_in_headers)
return sign_in_rsp
注释:
这个比较简单,好理解,****是隐藏了原有的网址接口信息,为了防止不必要的麻烦
这是一个使用Python的requests库进行POST请求的函数,用于手机号登录并返回响应。函数名为`sign_in`,接受两个参数:`uname`(用户名)和`password`(密码)。函数首先构造登录URL、登录数据和请求头,然后使用`requests.post`方法发送POST请求,最后返回响应。
这次的分享就暂时到这吧,下面是测试成功视频
这是个视频文件,同时运行了四个账号,并且每个账号都是多线程进行的“学习”
有问题请联系QQ1219235650(小号)
zhouwangxu@vip.qq.com
超星工具下载
超星工具2310版
文章出处登录后可见!