我一直在尝试对一个目录中的多个图像进行隐写,并使用Stegano模块将它们保存在另一个目录中。你知道吗
我想出了密码:
from stegano import slsb
import os, sys
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
path = os.path.join(APP_ROOT, 'current_folder/')
dirs = os.listdir( path )
new_path = os.path.join(APP_ROOT, 'new_folder/')
dirs2 = os.listdir( new_path )
def stegogal():
for item in dirs:
if os.path.isfile(path+item):
sw = "secretword"
f, e = os.path.splitext(path+item+'.png')
secret = slsb.hide(f, sw)
f, e = os.path.splitext(new_path+item+'.png')
secret.save(f + '_G.png')
stegogal()
然而,几乎所有图片中的秘密世界(三分之二)都会以某种方式被搞乱。例如,它将隐藏"secretworg"
,而不是"secretword"
。你知道吗
有人能给我解释一下问题出在哪里,也许能拿出更好的方法来解决吗?你知道吗
编辑2:错误修复,提交版本不要再使用下面的解决方案
**编辑:新版本将提供错误修复
长虫
-编码:utf-8--
隐藏这个秘密有一个漏洞。程序对消息的长度进行编码,以便知道要读取多少位进行提取。在内部,你的信息变成
在你的例子中,是104位。因为它不能被3整除,所以这个bug在这里启动
只嵌入前102位。对于提取,程序将读取足够的位来重建信息,但最后2位将取决于原始图像的像素值(您甚至可能不会碰巧注意到问题)。你知道吗
虽然由不同答案发布的快速破解解决了这个问题,但它是通过将其转移到其他可以忽略的地方来实现的。修复源代码会更方便(也更正确),这样您就可以方便地导入正确的函数,而无需依赖任何包装修补程序。你知道吗
将
message_bits
与必要的0数相加,使其长度可被3整除(提取后将丢弃它们)或者更改嵌入例程,当剩下的位数少于3位时,不跳过任何位。你知道吗
请注意,
slsbset
模块中也存在相同的bug。你知道吗相关问题 更多 >
编程相关推荐