Skip to content

Instantly share code, notes, and snippets.

@xyuanmu
Last active May 7, 2024 11:27
Show Gist options
  • Save xyuanmu/9338af7dc3ac2d3a1c4cd067e7d51bc0 to your computer and use it in GitHub Desktop.
Save xyuanmu/9338af7dc3ac2d3a1c4cd067e7d51bc0 to your computer and use it in GitHub Desktop.
Python版QQ音乐sign加密
#encoding = utf-8
import re
import base64
from hashlib import md5
headMap = [21, 4, 9, 26, 16, 20, 27, 30]
middleMap = [212, 45, 80, 68, 195, 163, 163, 203, 157, 220, 254, 91, 204, 79, 104, 6]
tailMap = [18, 11, 3, 2, 1, 7, 6, 25]
def sign(data):
'''zza + 随机12-16个字符 + md5('CJBPACrRuNy7'+data)
sign = 'zzaffffffffffff' + md5(b'CJBPACrRuNy7' + data.encode()).hexdigest()
'''
hexmd5 = md5(data.encode()).hexdigest()
middle = []
for i in range(0, 16):
middle.append(int(hexmd5[2*i] + hexmd5[2*i+1], 16))
middle = list(map(lambda x, y: x ^ y, middle, middleMap))
sign = base64.b64encode(bytearray(middle))
sign = re.sub(r'[+/=]', '', sign.decode())
sign = 'zzb' + ''.join(hexmd5[x] for x in headMap) + sign + ''.join(hexmd5[x] for x in tailMap)
return sign.lower()
if __name__ == '__main__':
data = '{"comm":{"cv":4747474,"ct":24,"format":"json","notice":0,"platform":"yqq.json","needNewCode":1,"uin":0,"g_tk_new_20200303":5381},"req_1":{"method":"GetSingerSongList","param":{"singerMid":"0016HGCv3wD5bJ","order":1,"begin":0,"num":10},"module":"musichall.song_list_server"}}'
print(sign(data))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment