# Encode elif flag == 1: # encode total_type = ['R0', 'R1', 'R2', 'R3', 'S', 'SR1', 'SR2', 'SR3'] real_type = total_type[num] return eval(real_type)(mat)
时间: 2023-06-18 16:04:26 浏览: 158
这段代码是一个函数,用于对输入的矩阵进行编码。根据输入的参数flag的不同取值,选择不同的编码方式。具体来说,当flag的值为1时,选择实现编码方式R0, R1, R2, R3, S, SR1, SR2, SR3中的一种。其中,total_type是所有编码方式的列表,num是当前选择的编码方式在total_type中的索引,real_type则是根据索引得到的当前选择的编码方式的名称,最终通过eval函数调用对应的编码函数对矩阵进行编码,并返回编码结果。
相关问题
def gen_conn_msg(pid=None,auth_info=None): msg_type=b'\x10' proto_desc=b'\x00\x03EDP' proto_ver=b'\x01' keepalive=struct.pack('!H',300) if pid and auth_info: conn_flag=b'\xc0' pid_len=struct.pack('!H',len(pid)) pid=pid.encode('utf-8') auth_info_len=struct.pack('!H',len(auth_info)) auth_info=auth_info.encode('utf-8') device=b'\x00\x00' auth=pid_len+pid+auth_info_len+auth_info else: print('CONN_REQ:params error,request params are not given!') raise Exception rest=proto_desc+proto_ver+conn_flag+keepalive+device+auth body_len=bytes([len(rest)]) conn_msg=msg_type+body_len+rest return conn_msg def recv_data_parser(recv_data): if not recv_data: sys.exit() elif recv_data[0]==0x90: msg_id=struct.unpack('!H',recv_data[3:5])[0] if recv_data[-1]==0: res=True else: res=False return msg_id,res elif recv_data[0]==0x20: pass elif recv_data[0]==0xA0: body_len,length_len=calc_body_len(recv_data) mark=length_len+1 cmdid_len=recv_data[mark:mark+2] mark+=2 cmdid_len=struct.unpack('!H',cmdid_len)[0] cmd_id=recv_data[mark:mark+cmdid_len] mark+=cmdid_len cmdbody_len=recv_data[mark:mark+4] mark += 4 cmd_body=recv_data[mark:] return cmd_id,cmd_body elif recv_data[0]==0xD0: pass elif recv_data[0]==0x40: return False,False def calc_body_len(r_msg): res=[] for x in range(4): if r_msg[x+1]>128: res.append(r_msg[x+1]-128) else: res.append(r_msg[x + 1]) if x==3 and r_msg[x+1]>128: print('Error:Wrong body length!') return body_len=0 for x in range(len(res)): body_len+=res[x]*128**x return body_len,len(res)解释上述代码
这段代码是一个基于EDP协议的消息解析和生成器。
gen_conn_msg()函数用于生成连接请求消息,可以传递pid和auth_info参数以进行身份验证。如果参数不正确,则会引发异常。
recv_data_parser()函数用于解析接收到的消息。它根据消息类型进行不同的处理。对于0x90和0x40类型的消息,它只返回一个布尔值。对于0xA0类型的消息,它返回cmd_id和cmd_body。对于其他类型的消息,它暂时不进行处理。
calc_body_len()函数用于计算消息体的长度。它根据EDP协议的规则,将前四个字节进行解析,并计算出消息体的长度。
该代码实现了一个基本的EDP协议的消息解析和生成器,可以用于与EDP协议兼容的设备进行通信。
import json import datetime import hashlib import hmac import base64 app_key = 'cms自动化测试-online' app_secret = 'Nj8MmpI3QBQzr1UibCCgPhNaJXnOpqn8FR+kStbOTMw' # Set headers for JWT header = { 'typ': 'JWT', 'alg': 'HS256' } # Prepare timestamp in seconds current_timestamp = datetime.datetime.now().timestamp() data = { "app_key": app_key, 'iat': current_timestamp, 'exp': current_timestamp + 30 # expiry time is 30 seconds from time of creation } def base64url(source): # Encode in classical base64 encoded_source = base64.b64encode(source,altchars=b'-_') # Remove padding equal characters encoded_source = encoded_source.rstrip(b'=') print(encoded_source) return encoded_source.decode('utf-8') # encode header stringified_header = json.dumps(header).encode('utf-8') encoded_header = base64url(stringified_header) # encode data stringified_data = json.dumps(data).encode('utf-8') encoded_data = base64url(stringified_data) # build token token = encoded_header + '.' + encoded_data # print(token) # sign token signature = hmac.new(app_secret.encode('utf-8'), token.encode('utf-8'), hashlib.sha256).digest() encoded_signature = base64url(signature) signed_token = token + '.' + encoded_signature
这段代码是用于生成一个JWT(JSON Web Token)的。JWT是一种用于身份验证和授权的标准。这个代码片段首先定义了一些变量,包括应用程序的密钥和密钥。然后,它创建了一个包含当前时间戳和其他数据的字典。接下来,它将头部和数据部分转换为JSON字符串,并对其进行Base64编码。然后,它将编码后的头部和数据拼接起来,并使用应用程序密钥对其进行HMAC-SHA256签名。最后,它将签名编码并将其附加到令牌末尾,得到最终的JWT。
阅读全文