# 平台侧构建code

# code概述

code是用户登录态信息的加密表示,它以加密的JSON字符串格式存在。本指南将详细介绍如何构建和生成code

# 构建步骤

# 第一步:准备加密字符串

  1. 收集必要信息:

    • userid(必填):平台用户的唯一标识符,需转换为字符串格式。只接受包含[a-zA-Z0-9]范围内的字符,最大长度为32位。
    • isAnchor(可选):标识用户是否为主播。默认为"0"(非主播),如果用户是主播,则设置为"1"。
    • clientIP(可选但建议填写):用户的真实IP地址,支持IPv4和IPv6格式。例如:"66.249.61.91"。某些道具的发放可能需要真实的用户IP。
  2. 构建JSON对象:将收集的信息以JSON格式表示。例如:

{  
  "userid": "user12345",  
  "isAnchor": "0",  
  "clientIP": "2001:0db8:86a3:08d3:1319:8a2e:0370:7344"  
}
1
2
3
4
5
  1. 转换为字符串:确保JSON对象被转换为字符串形式,以便进行后续的加密操作。

# 第二步:加密处理

  1. AES-128-ECB加密:使用AES-128-ECB算法对上一步生成的JSON字符串进行加密。
  2. Base64编码:加密后的数据可能是二进制格式,需要对其进行Base64编码,以转换为可见的字符串形式。

# 加密数据规范

参数 类型 必填 说明
userid string 平台用户ID,需为字符串格式,仅包含[a-zA-Z0-9]的字符,最长32位
isAnchor string 主播标识,默认为"0",主播则填"1"
clientIP string 可选(推荐) 真实用户IP,支持IPv4和IPv6,如:"66.249.61.91"

# 示例代码

以下是一个Python示例代码,展示了如何构建和加密code


def _encrypt(data, password):
    if isinstance(password, str):
        password = password.encode('utf8')

    bs = AES.block_size
    pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)
    # AES-128-ECB加密 
    cipher = AES.new(password, AES.MODE_ECB)
    data = cipher.encrypt(pad(data).encode('utf8'))
    # Base64编码  
    encrypt_data = base64.b64encode(data)
    return encrypt_data

def _get_code(user_id, seckey):
    """  
    构建并加密code。  
      
    :param user_id: 平台用户ID  
    :param is_anchor: 是否为主播,默认为0(非主播)  
    :param client_ip: 用户IP地址(可选)  
    :param secret_key: AES加密密钥,由livelink分配  
    :return: 加密后的code字符串  
    """  
    
    # 构建JSON对象  
    login_info = {'userid': user_id, 'isAnchor': 0, 'clientIP': "2001:0db8:86a3:08d3:1319:8a2e:0370:7344"}
    json_str = json.dumps(login_info)
    
    # AES加密
    ecb_data = _encrypt(json_str, seckey)
    # _show_output(ecb_data, 'code加密完成')
    return str(ecb_data, 'utf-8')
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

注意:请确保你已经安装了pycryptodome库,可以通过pip install pycryptodome来安装。此外,密钥seckey应由livelink分配,并且需要保持机密性。

lastUpdate: 4/18/2024, 5:21:03 PM