Python 对 int() 的文字无效,以 2 为基数



我正在尝试一个简单的隐写python程序。编码有效,但我得到错误 ValueError:int(( 的文字无效,基数为 2:'0b#99c1f#......该值应该是二进制的,我找不到错误。我正在使用python 2.7,这是代码:

from PIL import Image
import binascii
import optparse

def rgb2hex(r,g,b):
    return '#{:02x}{:02x}{:02x}'.format(r,g,b)

def hex2rgb(hexcode):
    return tuple(map(ord,hexcode[1:].decode('hex')))

def str2bin(message):
    binary = bin(int(binascii.hexlify(message), 16))
    return binary[2:]

def bin2str(binary):
    message = binascii.unhexlify('%x' %(int('0b' + binary, 2)))
    return message

def encode(hexcode, digit):
    if hexcode[-1] in ('0', '1', '2', '3', '4', '5'):
        hexcode = hexcode[:-1]+digit
        return hexcode
    else:
        return None

def decode(hexcode):
    if(hexcode[-1] in ('0','1')):
        return hexcode[:-1]
    else:
        return None

def hide(filename, message):
    img = Image.open(filename)
    binary = str2bin(message) + '1111111111111110'
    if img.mode in ('RGBA'):
        img = img.convert('RGBA')
        datas = img.getdata()
        newData = []
        digit = 0
        temp = ''
        for item in datas:
            if (digit < len(binary)):
                newpix = encode(rgb2hex(item[0], item[1], item[2]), binary[digit])
                if newpix == None:
                    newData.append(item)
                else:
                    r,g,b = hex2rgb(newpix)
                    newData.append((r,g,b,255))
                    digit += 1
            else:
                newData.append(item)
        img.putdata(newData)
        img.save(filename, "bmp")
        return "Completed!"
    return "Incorrect Image mode"

def retr(filename):
    img = Image.open(filename)
    binary = ''
    if img.mode in ('RGBA'):
        img = img.convert('RGBA')
        datas = img.getdata()
        for item in datas:
            digit = decode(rgb2hex(item[0], item[1], item[2]))
            if digit == None:
                pass
            else:
                binary = binary + digit
                if (binary[-16:] == '1111111111111110'):
                    print "Success"
                    return bin2str(binary[:-16])
        return bin2str(binary)
    return "incorrect image mode"

def Main():
    parser = optparse.OptionParser('usage %prog -e/-d <target file>')
    parser.add_option('-e', dest='hide', type='string', help='target picture')
    parser.add_option('-d', dest='retr', type='string', help='target picture')
    (options, args) = parser.parse_args()
    if options.hide != None:
        text = raw_input("Enter a message: ")
        print hide(options.hide, text)
    elif options.retr != None:
        print retr(options.retr)
    else:
        print parser.usage
        exit(0)

Main()

此行会导致错误:

binary = binary + digit

其中,digit是一个带有十六进制值的字符串(例如 #003f7 (,您正在将其与应该是二进制字符串的内容连接起来(但实际上是这样的:#003f7#003f7... (。然后将该值传递给 bin2str()

相关内容

  • 没有找到相关文章