当前位置: 首页 > news >正文

基于混沌算法的图像加密解密系统

1.研究背景与意义

项目参考AAAI Association for the Advancement of Artificial Intelligence

研究背景与意义:

随着信息技术的迅猛发展,图像的传输和存储已经成为现代社会中不可或缺的一部分。然而,随着互联网的普及和信息的快速传播,图像的安全性问题也日益凸显。为了保护图像的机密性和完整性,图像加密解密技术应运而生。

传统的图像加密解密方法主要基于数学算法,如DES、AES等。这些算法在一定程度上能够保护图像的安全性,但是随着计算机技术的发展,这些算法的安全性逐渐受到挑战。因此,研究人员开始寻找更加安全可靠的图像加密解密方法。

混沌算法作为一种新兴的加密解密技术,具有很大的潜力。混沌算法是一种非线性动力学系统,具有高度的敏感性和不可预测性。它的主要特点是初始条件的微小变化会导致系统输出的巨大变化,这使得混沌算法在加密解密领域具有很大的优势。

基于混沌算法的图像加密解密系统具有以下几个方面的意义:

首先,基于混沌算法的图像加密解密系统能够提供更高的安全性。混沌算法的不可预测性使得攻击者很难通过分析加密算法的数学模型来破解加密图像。这样一来,图像的机密性就能够得到更好的保护。

其次,基于混沌算法的图像加密解密系统能够提供更高的效率。混沌算法的并行性和高速性使得加密解密过程可以在较短的时间内完成,从而提高了系统的效率。

此外,基于混沌算法的图像加密解密系统还具有较强的适应性和灵活性。混沌算法可以根据不同的需求和应用场景进行调整和优化,从而实现更加灵活的加密解密方式。

最后,基于混沌算法的图像加密解密系统对于图像信息的传输和存储具有重要的意义。通过使用混沌算法对图像进行加密,可以有效地防止图像在传输和存储过程中被非法获取和篡改,从而保证图像信息的完整性和可靠性。

综上所述,基于混沌算法的图像加密解密系统具有较高的安全性、效率、适应性和灵活性,对于保护图像的机密性和完整性具有重要的意义。随着混沌算法的不断发展和优化,相信基于混沌算法的图像加密解密系统将在信息安全领域发挥越来越重要的作用。

2.图片演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.视频演示

基于混沌算法的图像加密解密系统_哔哩哔哩_bilibili

4.混沌系统简介

混沌系统

混沌理论是美国气象学家Lorenz在1963年发表的《确定性非周期流》中提出的。它被看作是一种整个系统看似不确定,然而却有规律可循的伪随机系统。只有在初始条件完全一致的情况下,混沌系统的结果才能得到复现。不过,学术界在很长一段时间里都对它没有一个公认的数学定义。直到1975年,在一篇由李天岩同其导师合作发表的著作中对混沌系统给出了清晰明确的数学上的定义,从此开辟了混沌系统研究的新篇章。混沌系统具备遍历和不可预测等特性,符合密码学对加密算法的要求,能够应用于图像加密等众多加密领域。本节从混沌的定义、特征、判定和常见的混沌系统四个方面介绍关于混沌的相关知识。

混沌的定义

对混沌的研究一直处于探索阶段,许多学者通过结合自己的研究方向和领域,对混沌进行了不同角度的解释和定义。目前,在学术界使用较多、认可度高的是Li-Yorke(李天岩-约克)定义l67和Devaney(德瓦尼)定义[68的,两者具体的定义内容如下:
(1) Li-Yorke(李天岩-约克)定义:
1975年,李天岩同其导师合作发表了一篇名为《Period three implies chaos》的论文对混沌给出了较为准确、完整的定义,并被称为Li-Yorke定义且被后续学者广泛使用。该定义具体内容为:若f(x)在闭区间D上连续自映射且满足下列条件:

  1. f周期点的周期无上界:
    2.闭区间D中存在不可数子集Q(QeD),且满足以下3个公式:i.对vxi,x2 e Q,且xy≠xz时:
    在这里插入图片描述

其中,sup为上确界,inf为下确界。
那么f(x)就是混沌的。
(2)Devaney(德瓦尼)定义:
与Li-Yorke定义方法不同的是,Devaney定义使用了拓扑理论对混沌进行解释和描述。其定义为:若存在度量空间z,当度量空间z上存在一个连续自映射f时,如果f满足下列条件:

  1. f的周期点在度量空间Z中是稠密的:
  2. f具有拓扑传递性:对VM,N ∈Z,an >0使得f“(M) nN≠中:
  3. f具有初值敏感性:对vE>0和vx∈Zz,36 > 0,x2∈E领域且有自然数n使得|f"(x)- f"(xz) > 8;
    那么就可以说f在Z上就是混沌的。
混沌系统的特性

混沌系统是一种基于数学原理的伪随机系统,其运动非常复杂,毫无规律可言,具有初值敏感、长期不可预测、内在随机等以下特性:
(1)初值敏感性:当给定的两个系统初始值不同时,即使两个输入的初始值差距极小,通过混沌系统的演化后,两个初始值将产生截然不同的结果,结果值的差距可能很大,这就是所谓的“雪崩效应”。尽管是极微小的初始数值差异,也会引发极大的结果值不同。
(2)长期不可预测性:由于混沌系统的初值敏感性。

5.核心代码讲解

5.1 decrypt_image.py

class HomomorphicsEncryption:def __init__(self, alpha, beta, gamma):"""图像同态加密参数:alpha: 光照增益参数 (浮点数)beta: 反射系数参数 (浮点数)gamma: 对数变换参数 (浮点数)"""self.alpha = alphaself.beta = betaself.gamma = gammadef decrypt(self, encrypted_image):"""解密图像参数:encrypted_image: 加密的图像 (NumPy数组)返回值:decrypted_image: 解密后的图像 (NumPy数组)"""# 将加密图像转换为浮点型encrypted_image = encrypted_image.astype(np.float32)# 反转反射系数调整image = (encrypted_image - self.gamma) / self.alpha# 对数反变换log_image = np.log1p(image)# 傅里叶变换fft_image = np.fft.fft2(log_image)# 中心化频谱shifted_fft = np.fft.fftshift(fft_image)# 构建高通滤波器rows, cols = image.shape[:2]center_row, center_col = rows // 2, cols // 2filter = np.zeros((rows, cols), dtype=np.float32)filter[center_row-10:center_row+10, center_col-10:center_col+10] = 1# 应用滤波器filtered_fft = shifted_fft * filter# 逆变换shifted_ifft = np.fft.ifftshift(filtered_fft)ifft_image = np.fft.ifft2(shifted_ifft)# 反对数变换decrypted_image = np.expm1(np.real(ifft_image))# 转换为8位无符号整型decrypted_image = np.clip(decrypted_image, 0, 255).astype(np.uint8)return decrypted_image

该程序文件名为decrypt_image.py,主要功能是对加密图像进行解密。

程序首先导入了cv2、HomomorphicEncryption和ChaosImageCryptor模块。

HomomorphicsEncryption类的构造函数接收三个参数alpha、beta和gamma,分别表示光照增益参数、反射系数参数和对数变换参数。

decrypt方法接收一个加密的图像作为参数,返回解密后的图像。在解密过程中,首先将加密图像转换为浮点型,然后进行反转反射系数调整,再进行对数反变换,接着进行傅里叶变换,并对频谱进行中心化处理。然后构建一个高通滤波器,应用该滤波器对频谱进行滤波。最后进行逆变换和反对数变换,并将解密后的图像转换为8位无符号整型。

接下来,程序定义了一个key变量,用于加密和解密过程中的密钥。encrypted_image_path和decrypted_image_path分别表示加密图像和解密后的图像的路径。

程序使用cv2模块读取加密图像,并创建了一个ChaosImageCryptor对象cryptor。

然后创建了一个HomomorphicEncryption对象decryptor,使用decrypt方法对加密图像进行解密,并将解密后的图像保存到decrypted_image_path路径。

接着使用cv2模块读取解密后的图像,并调用cryptor对象的decrypt_image方法对图像进行进一步解密。

最后,将最终解密后的图像保存到decrypted_image_path路径。

5.2 encrypt_image.py

class HomomorphicsEncryption:def __init__(self, alpha, beta, gamma):self.alpha = alphaself.beta = betaself.gamma = gammadef encrypt(self, image):image = image.astype(np.float32)log_image = np.log1p(image)fft_image = np.fft.fft2(log_image)shifted_fft = np.fft.fftshift(fft_image)rows, cols = image.shape[:2]center_row, center_col = rows // 2, cols // 2filter = np.zeros((rows, cols), dtype=np.float32)filter[center_row-10:center_row+10, center_col-10:center_col+10] = 1filtered_fft = shifted_fft * filtershifted_ifft = np.fft.ifftshift(filtered_fft)ifft_image = np.fft.ifft2(shifted_ifft)decrypted_image = np.expm1(np.real(ifft_image))encrypted_image = self.alpha * image + self.beta * decrypted_image + self.gamma......

这个程序文件名为encrypt_image.py,它包含了一个名为HomomorphicsEncryption的类和一些其他的函数和变量。

HomomorphicsEncryption类有一个构造函数,它接受三个参数alpha、beta和gamma,用于图像同态加密。类中还有一个encrypt方法,用于对输入的图像进行加密操作。

程序的主要逻辑是:

  1. 导入所需的库和模块,包括cv2、homomorphic_encryption和ui。
  2. 创建一个ChaosImageCryptor对象cryptor,用于图像加密。
  3. 调用cryptor对象的encrypt_image方法,对指定路径的图像进行加密,并将加密后的图像保存到output_path路径。
  4. 使用cv2库的imread函数读取加密后的图像。
  5. 创建一个HomomorphicEncryption对象encryptor,使用指定的密钥进行初始化。
  6. 调用encryptor对象的encrypt方法,对读取的图像进行加密操作。
  7. 使用cv2库的imwrite函数将加密后的图像保存到output_path路径。

整个程序的目的是对指定路径的图像进行同态加密,并将加密后的图像保存到指定路径。

5.3 homomorphic_encryption.py

class HomomorphicEncryption:def __init__(self, key):self.key = keydef encrypt(self, image):encrypted_image = np.add(image, self.key) % 256return encrypted_imagedef decrypt(self, encrypted_image):decrypted_image = np.subtract(encrypted_image, self.key) % 256return decrypted_image

这个程序文件名为homomorphic_encryption.py,它实现了一个名为HomomorphicEncryption的类。该类有一个构造函数__init__,接受一个参数key作为密钥,并将其存储在实例变量self.key中。

该类还有两个方法encrypt和decrypt,用于加密和解密图像。encrypt方法接受一个参数image作为要加密的图像,它将图像的每个像素值与密钥相加,并对结果取模256,然后返回加密后的图像。decrypt方法接受一个参数encrypted_image作为要解密的图像,它将加密图像的每个像素值与密钥相减,并对结果取模256,然后返回解密后的图像。

5.4 paillier_encryption.py
class PaillierEncryption:def __init__(self, public_key, private_key=None):self.public_key = public_keyself.private_key = private_keydef encrypt_image(self, image):encrypted_image = [[self.public_key.encrypt(int(pixel)) for pixel in row] for row in image]return encrypted_imagedef decrypt_image(self, encrypted_image):decrypted_image = [[self.private_key.decrypt(pixel) for pixel in row] for row in encrypted_image]return decrypted_image

这个程序文件名为paillier_encryption.py,它实现了一个PaillierEncryption类。该类的构造函数接受一个公钥(public_key)和一个可选的私钥(private_key)作为参数。

该类有两个方法:

  1. encrypt_image方法接受一个图像(image)作为参数,并对图像中的每个像素进行加密。加密后的图像以二维列表的形式返回。
  2. decrypt_image方法接受一个加密图像(encrypted_image)作为参数,并对加密图像中的每个像素进行解密。解密后的图像以二维列表的形式返回。

该程序使用phe库中的paillier模块来实现Paillier加密算法。Paillier加密算法是一种公钥加密算法,可以对整数进行加密和解密操作。

6.系统整体结构

整体功能和构架概述:
该图像加密解密系统的整体功能是对图像进行加密和解密操作。系统使用了混沌算法、同态加密和Paillier加密算法来实现图像的安全传输和保护。系统包含了四个主要的程序文件:decrypt_image.py、encrypt_image.py、homomorphic_encryption.py和paillier_encryption.py。其中,decrypt_image.py和encrypt_image.py分别用于图像的解密和加密操作,homomorphic_encryption.py实现了同态加密算法,paillier_encryption.py实现了Paillier加密算法。另外,ui.py是一个用户界面文件,用于提供用户友好的图形界面来操作图像加密解密系统。

下表整理了每个文件的功能:

文件名功能
decrypt_image.py对加密图像进行解密操作
encrypt_image.py对图像进行加密操作
homomorphic_encryption.py实现同态加密算法
paillier_encryption.py实现Paillier加密算法
ui.py提供用户界面,用于操作图像加密解密系统

7.图像隐写

图像隐写可以追溯到20世纪90年代,当时互联网的使用正在快速增长,数字图像成为当时主要的信息传输方式之一。在这种情况下,图像隐写被广泛应用于隐藏秘密图像信息,以避免被未经授权的人员拦截和访问,提高秘密图像信息的安全性以及保障传输过程的安全性。随着网络安全和信息安全的不断提高,越来越多的学者对其进行深入的研究,图像隐写也变得更加复杂和高级。

图像障写的定义

图像隐写是一种将秘密图像信息嵌入到载体图像中的技术,同时嵌入秘密信息的载密图像与载体图像在视觉上几乎没区别。隐写术是一种隐藏信息的方法,它不同于加密,加密是将数据转换为不可读或无意义的乱码数据形式,而隐写术是将数据隐藏在其他数据中,以使其在不引起怀疑的情况下传输。图像隐写可以在许多领域得到应用,例如数字水印、安全通信、网络安全等。

图你隐写的过程

图像隐写是一种将秘密图像信息嵌入到数字图像中的技术,以下是一般的图像隐写过程:
图像发送方:

基于混沌递归加密的图像隐写模型研究

像隐写方案对于输入的秘密图像要求的大小和格式,这个过程中可对秘密图像进行加密:
(2)选择载体图像:从图像库选择一张数字图像作为载体图像,它将被用来隐藏秘密图像;
(3)选择嵌入算法:选择一种图像隐写算法,如LSB、HUGO等,它将根据嵌入算法的规则将秘密图像嵌入到载体图像中,或选择通过神经网络模型作为嵌入模型,如StegGAN、DCGAN、Unet等:
(4)嵌入秘密信息:使用选择的图像隐写算法将秘密信息嵌入到载体图像中。通过这对载体图像的像素进行修改,嵌入秘密图像信息,得到用于传输的载密图像,载密图像仍保留载体图像的视觉效果和质量:
(5)图像发送:将嵌入秘密图像信息的载密图像在公开信道发送给图像接收方。

图像接收方:

(1)接收载密图像:从公开信道接收传输过来的载密图像:
(2)提取秘密信息:使用相对应的提取算法将嵌入在载密图像中的秘密图像提取出来。提取算法需要与嵌入算法兼容,以确保获得准确的提取图像:
(3)解密秘密信息:如果在对秘密图像进行嵌入操作前,对秘密图像进行了加密操作,则提取出秘密图像后需要使用相应的密钥对其进行解密,以获得原始的秘密图像;
(4)评估嵌入和提取效果:评估嵌入秘密信息后的载密图像和提取得到的原始秘密图像,以确保秘密图像隐藏可以被正确提取。

图像隐写的评价

当设计出一个图像隐写方案后,为了验证其有效性,需要对所提图像隐写方案进行评价,以下是图像隐写方案常见的主要评价指标:
(1)安全性:图像隐写方案的安全性是评价其优劣的重要指标之一。一个安全的图像隐写方案应该能够抵御各种攻击,例如隐写分析攻击、恶意插入攻击、盲水印攻击等。
(2)容量:图像隐写方案的容量是指能够隐藏在载体图像中的秘密信息量大小。一个好的图像隐写方案应该具有高容量,能够在不影响图像质量的前提下嵌入尽可能多的信息。
(3)隐蔽性:图像隐写方案的隐蔽性是指在图像中嵌入的信息是否能够被发现。一个好的图像隐写方案应该具有高隐蔽性,即嵌入的信息不容易被人发现,并且载密图像在整个传输过程中不容易被发觉。
总的来说,一个好的图像隐写方案应该具有高安全性、高容量、高隐蔽性。评价图像隐写方案的优劣需要从多个方面综合考虑,而不是单一的指标。

8.基于混沌系统的递归置乱加密算法

本小节提出的混沌系统的递归置乱加密算法是使用混沌系统生成序列,并基于该序列来对图像进行置乱操作。本研究选择的是一维Logistic 混沌系统,混沌系统的原理在第二章有所介绍,这里不再赘述。在这个基于混沌系统的置乱加密过程中引入递归的思想,递归地对图像进行置乱加密操作。
传统的置乱加密算法通常通过同等对待某些级别的数据来加密整个图像,例如位级、两位级(DNA级)、像素级和/或块级数据。重复加密过程,直到所有数据至少被加密一次。众所周知,很多重复的任务都可以通过引入递归的思想来解决。然而,现有的加密算法很少考虑使用这种策略进行加密。在这里,我们提出了一种基于递归思想的图像置乱加密算法。与传统的加密算法相比,基于递归的置乱加密算法可以增加加密的复杂度,通过递归调用,可以在同一个加密算法内部多次对数据进行处理,从而增加加密的复杂度,提高破解的难度;基于递归的置乱加密算法可以实现分层加密,递归加密可以将加密算法分成多层,每层的加密方式不同,从而增加破解的难度。
在这里插入图片描述

9.模型结构

为了解决秘密图像信息泄露的问题,提高图像隐写模型的安全性。本小节所提的图像隐写方案参考该博客的方案,进行简化,首先将要隐藏的秘密图像通过所提出的基于混沌系统的递归置乱加密算法加密后,将载体图像和经加密后的秘密图像传入上一章节使用的基于Transformer模型架构中,通过该模型架构将经加密后的秘密图像信息嵌入到载体图像中,得到最终用于在公开信道传输的载密图像。接收方收到载密图像后,通过提取网络得到经加密后的秘密图像,再通过图像加密操作的逆操作就可以得到未进行图像加密前的秘密图像。由于秘密图像的内容信息在嵌入到载体图像之前经过了加密,因此秘密图像信息的机密性得到了更好的保护。即使图像隐写模型的过程被破解,攻击者仍需破解本小节所提出的基于混沌系统的递归置乱图像加密才能得到秘密图像信息。将图像加密算法与图像隐写模型结合,进一步提高了图像传输的安全性,保证了图像信息传输的过程和传输的信息,同时增强了图像隐写方案中用于在公开信道传输的载密图像的隐蔽性,即便攻击者截获了载密图像并破解了图像隐写的操作过程,但因为得到的是一张乱码图像,就会觉得自己没有成功破解图像隐写的过程。图显示了本小节提出的基于Transformer和混沌递归加密的图像隐写模型的架构图。
在这里插入图片描述

10.系统整合

下图完整源码&环境部署视频教程&自定义UI界面

在这里插入图片描述

参考博客《基于混沌算法的图像加密解密系统》

11.参考文献


[1]谢国波,朱润盈.复合级联混沌的彩色图像加密算法[J].计算机工程与应用.2018,(8).DOI:10.3778/j.issn.1002-8331.1612-0045 .

[2]赵锋,吴成茂.自编码和超混沌映射相结合的图像加密算法[J].计算机辅助设计与图形学学报.2016,(1).DOI:10.3969/j.issn.1003-9775.2016.01.015 .

[3]董虎胜,陆萍,马小虎.基于CNN超混沌系统与扩展ZigZag的图像加密算法[J].计算机应用与软件.2013,(5).DOI:10.3969/j.issn.1000-386x.2013.05.038 .

[4]Cheng-Hung Chuang.A Steganography-Based Optical Image Encryption System Using RGB Channel Integration[J].电子科技学刊.2013,(1).DOI:10.3969/j.issn.1674-862X.2013.01.002 .

[5]Jinyuan Liu,Yong Wang,Qi Han,等.A Sensitive Image Encryption Algorithm Based on a Higher-Dimensional Chaotic Map and Steganography[J].International Journal of Bifurcation & Chaos.2022,32(1).DOI:10.1142/S0218127422500043 .

[6]Meng Lingzhuang,Liu Lianshan,Tian Gang,等.An adaptive reversible watermarking in IWT domain[J].Multimedia tools & applications.2020,80(1).711-735.DOI:10.1007/s11042-020-09686-9 .

[7]Jiming Zheng,Zheng Luo,Zhirui Tang.An Image Encryption Algorithm Based on Multichaotic System and DNA Coding[J].Discrete dynamics in nature & society.2020.2020DOI:10.1155/2020/5982743 .

[8]Xintao Duan,Kai Jia,Baoxia Li,等.Reversible Image Steganography Scheme Based on a U-Net Structure[J].IEEE Access.2019.79314-9323.

[9]Zhang, Ru,Dong, Shiqi,Liu, Jianyi.Invisible steganography via generative adversarial networks[J].Multimedia tools and applications.2019,78(7).8559-8575.DOI:10.1007/s11042-018-6951-z .

[10]Gao, Guangyong,Wan, Xiangdong,Yao, Shimao,等.Reversible data hiding with contrast enhancement and tamper localization for medical images[J].Information Sciences: An International Journal.2017.385/386250-265.DOI:10.1016/j.ins.2017.01.009 .

相关文章:

基于混沌算法的图像加密解密系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义: 随着信息技术的迅猛发展,图像的传输和存储已经成为现代社会中不可或缺的一部分。然而,随着互联网的普及和信息的快速传播&am…...

vscode插件离线下载

离线下载插件地址:https://marketplace.visualstudio.com/VSCode...

第二十一章总结

一、网络通信: 1.网络程序设计基础:网络程序设计编写的是与其他计算机进行通信的程序。 1.1局域网与互联网:为了实现两台计算机的通信,必须用一个网络线路连接两台计算机 2.网络协议:网络协议规定了计算机之间连接的…...

查看端口占用并杀死进程

1.安装查看工具 sudo yum install net-tools 2.查看占用情况 netstat -tunlp | grep 8089 3.杀死进程 kill -9 227...

前后端数据传输格式(上)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 作为后端,写…...

maven的package和install命令有什么区别以及Maven常用命令与GAV坐标与Maven依赖范围与Maven依赖传递与依赖排除与统一声明版本号

maven的package和install命令有什么区别以及Maven常用命令与GAV坐标与Maven依赖范围与Maven依赖传递与依赖排除与统一声明版本号 一: maven的package和install命令有什么区别 一般都与clean命令结合使用 mvn package 生成target目录,编译、测试代码,…...

【动手学深度学习】(六)权重衰退

文章目录 一、理论知识二、代码实现2.1从零开始实现2.2简洁实现 【相关总结】 主要解决过拟合 一、理论知识 1、使用均方范数作为硬性限制(不常用) 通过限制参数值的选择范围来控制模型容量 通常不限制偏移b 小的意味着更强的正则项 使用均方范数作为柔…...

动手学习深度学习-跟李沐学AI-自学笔记(3)

一、深度学习硬件-CPU和GPU 芯片:Intel or AMD 内存:DDR4 显卡:nVidia 芯片可以和GPU与内存通信 GPU不能和内存通信 1. CPU 能算出每一秒能运算的浮点运算数(大概0.15左右) 1.1 提升CPU利用率 1.1.1 提升缓存…...

3.2 Puppet 和 Chef 的比较与应用

Puppet 和 Chef 的比较与应用 文章目录 Puppet 和 Chef 的比较与应用Puppet 和 Chef 简介工作原理对比**模块化的重要性**: Puppet 和 Chef 简介 介绍 Puppet 和 Chef 这两个流行的配置管理工具的背景和用途。强调它们的共同目标:实现自动化的系统配置和…...

promise使用示例

下面是一个 Promise 使用示例,通过 Promise 实现异步操作的链式调用: const getUser (userId) > {return new Promise((resolve, reject) > {// 模拟异步请求setTimeout(() > {const users [{ id: 1, name: Alice },{ id: 2, name: Bob },{ …...

一起学docker系列之十四Dockerfile微服务实践

目录 1 前言2 创建微服务模块2.1 **创建项目模块**2.2 **编写业务代码** 3 编写 Dockerfile4 构建 Docker 镜像5 运行 Docker 容器6 测试微服务7 总结8 参考地址 1 前言 微服务架构已经成为现代软件开发中的一种重要方式。而 Docker 提供了一种轻量级、便携式的容器化解决方案…...

Qt Creator 11.0.3同时使用Qt6.5和Qt5.14.2

Qt Creator 11.0.3同时使用Qt6.5和Qt5.14.2 概要方法1.打开Qt Creator中的Kit,这里我直接附上几张截图,不同的版本打开位置可能有所不同,总之最终目的是要打开构建套件(Kit)2.可以看到构建套件里面有包含了“构建套件K…...

Python中字符串列表的相互转换详解

更多资料获取 📚 个人网站:ipengtao.com 在Python编程中,经常会遇到需要将字符串列表相互转换的情况。这涉及到将逗号分隔的字符串转换为列表,或者将列表中的元素连接成一个字符串。本文将深入讨论这些情景,并提供丰富…...

09、pytest多种调用方式

官方用例 # content of myivoke.py import sys import pytestclass MyPlugin:def pytest_sessionfinish(self):print("*** test run reporting finishing")if __name__ "__main__":sys.exit(pytest.main(["-qq"],plugins[MyPlugin()]))# conte…...

分布式锁常见实现方案

分布式锁常见实现方案 基于 Redis 实现分布式锁 如何基于 Redis 实现一个最简易的分布式锁? 不论是本地锁还是分布式锁,核心都在于“互斥”。 在 Redis 中, SETNX 命令是可以帮助我们实现互斥。SETNX 即 SET if Not eXists (对应 Java 中…...

26、pytest使用allure解读

官方实例 # content of pytest_quick_start_test.py import allurepytestmark [allure.epic("My first epic"), allure.feature("Quick start feature")]allure.id(1) allure.story("Simple story") allure.title("test_allure_simple_te…...

Uncle Maker: (Time)Stamping Out The Competition in Ethereum

目录 笔记后续的研究方向摘要引言贡献攻击的简要概述 Uncle Maker: (Time)Stamping Out The Competition in Ethereum CCS 2023 笔记 本文对以太坊 1 的共识机制进行了攻击,该机制允许矿工获得比诚实同行更高的挖矿奖励。这种名为“Uncle Maker”的攻击操纵区块时间…...

浅谈可重入与线程安全

文章目录 可重入与线程安全的关系 可重入 若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另一段代码,这段代码又使用了该副程序不会出错”,则称其为可重入(reentrant 或 re-entrant)的。即当该副程序正在运作时&…...

深入理解TDD(测试驱动开发):提升代码质量的利器

在日常的软件开发工作中,我们常常会遇到这样的问题:如何在繁忙的项目进度中,保证我们的代码质量?如何在不断的迭代更新中,避免引入新的错误?对此,有一种有效的开发方式能帮助我们解决这些问题&a…...

pyqt5使用pyqtgraph实现动态热力图

pyqt5使用pyqtgraph实现动态热力图 一、效果图 二、流程 1、打开Designer创建一个UI界面 2、把UI转成py 3、创建一个main.py文件 4、在main文件中渲染画布、创建初始数据、画热力图、创建更新数据线程、绑定按钮触发事件三、UI界面 其中h_map.py代码如下: # -*- coding: ut…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

离线语音识别方案分析

随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

DBLP数据库是什么?

DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...