算法概述 算法的5大特性 确定性:算法的每一步骤必须有明确的定义,无二义性。即在相同输入下,每次执行都应得到相同的结果。 能行性:算法的每一步都必须是可实现的,即在有限时间内能用有限资源完成。 输入:算法可以有零个或多个输入,输入是算法处理的初始数据。 输出:算法必须有一个或多个输出,输出是算法处理的结果。 有穷性/有限性:算法必须在执行有限步骤后…
算法主要原理 算法流程如下: 算法步骤 实现AES的加密流程大部分不难,主要是比较繁琐,理清了思路就很好做了。其中最难处理的部分是列混淆,因为列混淆涉及到了有限域上的乘法运算。这部分内容在代码中的注释都比较详细,就不过多赘述。 剩余的过程代码注释也都比较详细,不多说了。 参考代码 aes.py # AES 128 bit encryption an…
算法主要原理 加密公式:C = (P + K)%26 C:密文 P:原文 K:第几套加密方式 解密公式:P = (C - K)%26 C:密文 P:原文 K:第几套加密方式 如果P<0,P+26取得正序 简单来说,Vigenere密码实际上就是分组的凯撒密码。而分组的方法就是重复密钥,密钥相同的明文为同一组。每一组都可以看作是由不同的密钥所加…
问题描述 有两个不同的守护进程,一个守护进程接收csi数据插入到数据库中,另一个守护进程从数据库中读取csi数据进行处理。 在两个守护程序运行的过程中,从数据库中读取csi数据进行处理的守护进程在数据库中有新数据的情况下无法读取到数据库的新数据。经过排查发现,新数据确实被接收csi数据的守护进程成功插入,但是读取csi数据的守护进程并没有从数据库中…
一、Socket是什么 Socket 的中文翻译过来就是“套接字”。套接字是什么,我们先来看看它的英文含义:插座。 Socket 就像一个电话插座,负责连通两端的电话,进行点对点通信,让电话可以进行通信,端口就像插座上的孔,端口不能同时被其他进程占用。而我们建立连接就像把插头插在这个插座上,创建一个 Socket 实例开始监听后,这个电话插座就时刻…
计算器实现 class Calculator: def __init__(self): self.queue = [] # 用于存储输入的计算表达式 def press_key(self, key): if self.is_valid_key(key): if key == '=': result = self.calculate(…
从运行状态到阻塞状态有等待锁的情况吗? 当一个线程试图获取一个锁(如 synchronized 块或 ReentrantLock),如果该锁已经被其他线程持有,当前线程无法立即获取锁时,就会从运行状态(Running)转换为阻塞状态(Blocked),直到锁被释放。 文章最后部分有两个讨论: 获取到锁的线程为什么不直接执行到结束,这样就不会占用锁了…