Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有任何原因导致png的lsb中的位以低于或高于1位的偏移量变化_Python_Binary_Png_Python Imaging Library_Steganography - Fatal编程技术网

Python 是否有任何原因导致png的lsb中的位以低于或高于1位的偏移量变化

Python 是否有任何原因导致png的lsb中的位以低于或高于1位的偏移量变化,python,binary,png,python-imaging-library,steganography,Python,Binary,Png,Python Imaging Library,Steganography,我创建了一个简单的python脚本,将png R G和B的LSB中的二进制文本保存成一行。它工作得很好,但有时其中一个位会发生变化,在描述过程中,我得到的是,例如,当与ascii值相关时,用“`”代替“a”,用“e”代替“d”偏移量为1 def encode(img, bin_str): new_img_data = [] new_pixel = () i = 0 img_data = img.getdata() isDone = False fo

我创建了一个简单的python脚本,将png R G和B的LSB中的二进制文本保存成一行。它工作得很好,但有时其中一个位会发生变化,在描述过程中,我得到的是,例如,当与ascii值相关时,用“`”代替“a”,用“e”代替“d”偏移量为1

def encode(img, bin_str):
    new_img_data = []
    new_pixel = ()
    i = 0
    img_data = img.getdata()
    isDone = False
    for pixel in img_data:
        for color_part in pixel:
            if i < len(bin_str):
                binary = bin(color_part)[2:].zfill(8)
                binary = binary[:7] + bin_str[i]
                new_pixel += (int(binary, 2),)
                i += 1
            else:
                isDone = True
        if isDone is True:
            new_pixel = pixel

        new_img_data.append((new_pixel))
        new_pixel = ()
    new_img = Image.new(img.mode, img.size)
    new_img.putdata(new_img_data)
    return new_img


def decode(img, payload_len):
    img_data = img.getdata()
    solution = ""
    i = 0
    for pixel in img_data:
        for color_part in pixel:
            if i < payload_len:
                solution += bin(color_part)[2:].zfill(8)[7]
            i += 1
    print(solution)
    print(bin_to_string(solution))#convert 8 bits to number and takes the ascii of it
def编码(img,bin_str):
新的img数据=[]
新像素=()
i=0
img_data=img.getdata()
isDone=False
对于img_数据中的像素:
对于像素中的颜色部分:
如果我
您能否提供一个示例输入及其相应的错误输出?我无法复制您的结果。当然,例如,我编码0110001(十进制为97,ascii值为小写a),解码在最后一位打印01100000(十进制为96,ascii为`)偏移量信息不足<代码>bin_str='0110001';slen=len(bin_str);解码(编码(img、bin_str、slen)打印与
bin_str
相同的内容。或者你正在使用一个允许特殊情况bug表达自己的图像,或者你对我上面所做的做了一些其他的事情,例如,将中间图像保存到jpeg或其他东西。您需要提供足够的信息来复制错误。