当前位置: 首页 > 科技观察

如何使用Python实现最低有效位隐写术?

时间:2023-03-14 13:52:11 科技观察

本文转载自公众号《阅读芯》(ID:AI_Discovery)它假设如果特征是可见的,那么攻击点就很明显,所以这里的目标始终是隐藏嵌入数据的存在。LSB图像隐写术LSB隐写术是一种图像隐写术,它通过用要隐藏的信息位替换每个像素的最低有效位来隐藏图像中的信息。为了更好地理解,将数字图像视为二维像素阵列,每个像素包含一个值,具体取决于其类型和深度。我们将考虑使用最广泛的模式——RGB(3x8位像素,真彩色)和RGBA(4x8位像素,带透明遮罩的真彩色),这些值的范围从0到255(8位值)。将图像表示为RGB像素的二维数组通过使用ASCII表,可以将消息转换为十进制值,然后转换为二进制值,然后逐个迭代像素值,转换像素后将值转换为二进制,用序列中的消息位替换每个最低有效位。要对编码图像进行解码,只需反转过程:收集并存储每个像素的最后一位,将它们分成8组,然后将它们转换回ASCII字符以获得隐藏信息。PYTHON操作尝试使用Python库PIL和NumPY逐步实现上述概念。步骤1:导入所有需要的python库importnumpyasnpfromPILimportImage步骤2:启用编码器功能首先,编写代码将源图像转换为NumPy像素数组并存储图像的大小。检查图像的模式是RGB还是RGBA,然后设置n的值。还需要计算像素总数。defEncode(src,message,dest):img=Image.open(src,'r')width,height=img.sizearray=np.array(list(img.getdata()))ifimg.mode=='RGB':n=3m=0elifimg.mode=='RGBA':n=4m=1total_pixels=array.size//n其次,在密文末尾添加一个分隔符("$T3G0"),这样程序会知道什么时候停止,将这个更新的消息转换成二进制形式并计算所需的像素。message+="$t3g0"b_message=''.join([format(ord(i),"08b")foriimmessage])req_pixels=len(b_message)接下来,检查可用像素总数是否足够用于秘密消息。如果你继续一个一个地迭代像素并将它们的最低有效位修改为秘密消息的位,直到隐藏了包括定界符的完整消息。ifreq_pixels>total_pixels:print("ERROR:Needlargerfilesize")else:index=0forpinrange(total_pixels):forqinrange(m,n):ifindextotal_pixels:print("ERROR:Needlargerfilesize")else:index=0forpinrange(total_pixels):forqinrange(m,n):ifindex