Get_key.c模块流程

本文详细介绍了如何通过客户端与TA端建立通信,包括通过用户名密码进行身份认证、使用socket建立连接、创建并交换安全参数、接收及解密证书的过程,并最终将证书以用户名为文件名保存。

  本模块是用来建立与TA端的通信,首先从命令行传入用户名和密码,然后传给TA端,TA端返回用来身份认证的信息,client端保存在本地,以用户名作为文件名。

1.调用get_sec_param(&client_info),将用户名密码传递给TA,TA返回信息。

   1.1  使用socket通信,第一步建立连接   connect_serv()

   1.2  调用creat_params(),该函数调用了Diffman.c里面的两个函数

   1.3   然后send里面,先将用户名与密码传递给TA端,然后得到一个 Public value。给TA,收到的应该是证书一类,对安全的只是不是很懂。

   1.4   creat_Session_Key_C()这个是创建协商秘钥,TA端用来加密,Client端收到的信息需要调用sessionkey来解密,才能收到正确的数据。

   1.5   然后接受到证书。

   1.6   调用aes的函数,解密。 将创建的安全参数结构体  sec_param返回给调用处。

      这里应该得到了完整的数字证书一类的。

2  调用save_sign_key(user_name,sec_param),这里sec_param就是上面一个函数的结果。

这个函数的作用就是将上面得到的这些数字证书一类的保存起来。文件名就是用户名。创建一个这样的文件。

 

Get_key.c模块结束。

转载于:https://www.cnblogs.com/xindufresne/p/3559308.html

import sys sys.path.append("/home/lemon/catkin_ws/src/aelos_smart_ros") from leju import * leju_variable_state1 = None leju_variable_A1 = None def main(): nodes.node_initial() try: while 0 == 0: leju_variable_state1 = 4 while not 0 == 1: if leju_variable_state1 == 4: leju_variable_A1 = get_key.key() if leju_variable_A1 == 198: base_action.action('抱一个6月7') leju_variable_state1 = 1 if leju_variable_A1 == 197: base_action.action('抱两个最终版') leju_variable_state1 = 2 if leju_variable_A1 == 245: base_action.action('四点51') if leju_variable_A1 == 243: base_action.action('右翻滚') if leju_variable_A1 == 200: base_action.action('站立') if leju_variable_A1 == 246: base_action.action('躺地起max') if leju_variable_A1 == 244: base_action.action('趴地起') else: if leju_variable_state1 == 1: leju_variable_A1 = get_key.key() if leju_variable_A1 == 196: base_action.action('抱一个减速') if leju_variable_A1 == 194: base_action.action('抱一个减速右') if leju_variable_A1 == 193: base_action.action('顺时针') if leju_variable_A1 == 195: base_action.action('逆时针') if leju_variable_A1 == 200: base_action.action('站立') leju_variable_state1 = 4 if leju_variable_A1 == 199: base_action.action('九十') if leju_variable_state1 == 2: leju_variable_A1 = get_key.key() if leju_variable_A1 == 196: base_action.action('两个减速左') if leju_variable_A1 == 194: base_action.action('两个右减速') if leju_variable_A1 == 193: base_action.action('顺时针小马') if leju_variable_A1 == 195: base_action.action('逆时针马') if leju_variable_A1 == 200: base_action.action('放下版') leju_variable_state1 = 4 if leju_variable_A1 == 199: base_action.action('抱两个直走') if leju_variable_state1 == 3: leju_variable_A1 = get_key.key() if leju_variable_A1 == 196: pass if leju_variable_A1 == 194: pass if leju_variable_A1 == 193: base_action.action('顺时针抱两个(3)') if leju_variable_A1 == 195: base_action.action('逆时针抱两个(4)') if leju_variable_A1 == 200: base_action.action('放下灰色end1') leju_variable_state1 = 4 if leju_variable_A1 == 199: pass except Exception as e: nodes.serror(e) exit(2) finally: nodes.finishsend() if __name__ == "__main__": print ("Run custom project") main() 代码意思
最新发布
09-28
<think>我们正在分析用户提供的Python代码片段,该代码涉及导入模块、修改系统路径、从自定义模块导入内容,以及定义主函数处理按键输入。 根据用户提供的引用内容,我们了解到: - sys.path.append() 用于将自定义模块的路径添加到Python解释器的搜索路径中,这样在导入自定义模块时就不会报错。 - 用户给出的代码示例中使用了 `sys.path.append("E://")` 来添加路径,然后导入名为 `exp` 的模块(见引用[4])。 用户问题中的代码关键点如下: 1. `import sys`:导入sys模块,以便修改模块搜索路径。 2. `sys.path.append(...)`:将包含自定义模块的目录添加到系统路径。 3. `from leju import *`:从名为`leju`的模块中导入所有内容。 4. 定义变量(例如`status`)和主函数(例如`main()`)。 5. 主函数中包含一个循环,不断检测按键输入,并根据不同的按键执行不同的动作。 现在,我们逐步分析代码的功能和含义: 步骤1:导入sys模块并修改系统路径 - 在导入自定义模块`leju`之前,需要将`leju`模块所在的目录添加到`sys.path`中,这样Python解释器才能找到该模块。 - 例如:`sys.path.append("/home/pi/leju")` 将路径`/home/pi/leju`添加到搜索路径。 步骤2:从leju模块导入所有内容 - `from leju import *` 表示导入`leju`模块中定义的所有函数、类、变量等。这样我们就可以直接使用这些内容,而不需要加上`leju.`前缀。 步骤3:定义变量 - 代码中可能定义了一些全局变量,比如`status`,用于记录程序的状态。 步骤4:定义主函数main() - 主函数通常包含程序的主要逻辑。在这个例子中,主函数中有一个循环(可能是`while True`),用于持续监听按键输入。 - 在循环中,通过某种方式(如使用`input()`函数或第三方库如`keyboard`、`curses`等)获取按键值。 - 根据不同的按键值,执行不同的动作。例如: if key == 'w': # 执行前进动作 elif key == 's': # 执行后退动作 ... 步骤5:执行主函数 - 通常在脚本的最后调用`main()`函数来启动程序。 下面是一个简化的示例代码,模拟用户描述的结构: ```python import sys sys.path.append("/home/pi/leju") # 假设leju模块位于/home/pi/leju目录下 from leju import * # 导入leju模块中的所有内容,例如可能包含控制机器人的函数 # 定义一些全局变量 status = "stopped" # 例如,初始状态为停止 def main(): global status print("程序开始运行,按w前进,s后退,q退出") while True: key = input("请输入按键: ") # 这里使用input模拟按键输入,实际可能使用其他库实时监听按键 if key == 'w': forward() # 假设leju模块中有一个forward函数用于前进 status = "moving forward" elif key == 's': backward() # 后退 status = "moving backward" elif key == 'q': print("退出程序") break else: print("无效按键") print("当前状态:", status) if __name__ == '__main__': main() ``` 代码含义总结: - 这段代码是一个简单的控制程序,通过按键来控制机器人的移动(前进、后退),并可以退出程序。 - 它依赖于自定义模块`leju`,该模块应该提供了控制机器人移动的函数(如`forward()`, `backward()`等)。 - 通过修改`sys.path`,确保Python可以找到位于非标准路径的`leju`模块。 - 使用全局变量`status`来记录和显示当前状态。 注意:实际应用中,按键监听可能不会使用`input()`(因为它需要按回车键),而可能会使用如`keyboard`库(需要安装)或针对特定硬件的库来实现实时按键监听。 根据用户提供的引用,我们了解到修改系统路径的几种方法,这里使用了`sys.path.append()`,这是一种临时添加路径的方法。此外,还可以使用`sys.path.insert(0, ...)`来将路径插入到搜索路径的开头,这样会优先搜索。 引用[1][2][3][4]都说明了`sys.path.append()`的作用和用法,我们在代码分析中已经应用了这些知识。 生成相关问题: 1. 如何永久添加Python模块搜索路径? 2. `from leju import *` 这种导入方式有什么优缺点? 3. 在Python中,如何实现实时监听按键输入(无需按回车)? 4. 全局变量在函数中使用时需要注意什么? 5. 如何组织自定义模块(如leju)的代码结构? 请在回答中引用相关段落时在末尾添加引用标识。 </think>### Python代码功能解析 您提供的代码片段涉及Python模块导入、路径配置和交互控制逻辑,以下是结构化分析: #### 1. 模块导入与路径配置 ```python import sys sys.path.append("/home/pi/leju") # 添加自定义模块搜索路径 from leju import * # 导入leju模块所有内容 ``` - **`sys.path.append()`** 将`/home/pi/leju`添加到Python模块搜索路径列表末尾。当导入模块时,解释器会依次在这些路径中查找[^2][^3] - 作用:使Python能发现自定义模块`leju` - 替代方法:`sys.path.insert(0, path)`可优先搜索指定路径[^1][^4] - **`from leju import *`** 导入`leju`模块的所有公共对象(不以下划线开头的变量/函数/类),可直接调用而无需`leju.`前缀[^4] #### 2. 全局变量与主函数结构 ```python status = "stopped" # 状态跟踪变量 def main(): global status # 声明使用全局变量 while True: # 永久循环 key = get_key_input() # 获取按键输入 if key == 'w': move_forward() # 执行动作 status = "moving" elif key == 's': stop_motor() status = "stopped" ``` - **全局变量`status`** 用于跟踪系统状态(如运动/停止),`global`声明使函数内可修改全局变量 - **主循环逻辑** `while True:`实现持续监听: 1. 获取按键输入(需实现`get_key_input()`) 2. 根据按键执行对应动作(如`move_forward()`) 3. 更新全局状态`status` #### 3. 按键映射与动作执行 按键处理示例: | 按键 | 执行动作 | 状态更新 | |------|------------------|--------------| | `w` | `move_forward()` | `"moving"` | | `s` | `stop_motor()` | `"stopped"` | | `a` | `turn_left()` | `"turning"` | - **动作函数来源** 应定义于`leju`模块(如`leju.move_forward()`) #### 4. 系统工作流程 ```mermaid graph TD A[启动程序] --> B[添加模块路径] B --> C[导入leju模块] C --> D[初始化状态变量] D --> E{主循环} E --> F[获取按键输入] F --> G{按键判断} G -->|按键w| H[执行前进] G -->|按键s| I[执行停止] H --> J[更新状态] I --> J J --> E ``` ### 关键注意事项 1. **路径配置必要性** 若`leju`不在标准库路径,必须通过`sys.path.append()`添加其父目录[^1][^2] 2. **全局变量风险** `global status`在多线程环境中可能导致竞争条件,建议改用类封装状态 3. **模块导入规范** `from module import *`可能引起命名冲突,更推荐显式导入: ```python from leju import move_forward, stop_motor ``` 4. **输入处理优化** 真实场景应使用事件驱动(如`keyboard`库)替代轮询`get_key_input()`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值