有可能加密整数吗?

2024-07-02 14:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我的程序是速记程序,它将一个图像插入另一个图像中,我试图在将数据插入封面图像之前对数据进行加密。但是,大多数加密模块都需要字符串,我尝试传递整数。在

我尝试过先转换为字符串然后再加密,但加密中充满了特殊字符和字母,因此无法转换回整数进行插入。在

有人知道我能不能加密一个整数?它不必很安全。在

我想在这里添加加密:

for i in range(0,3):
    #verify we have reached the end of our hidden file
    if count >= len(Stringbits):
        #convert the bits to their rgb value and appened them
        for rgbValue in pixelList:
            pixelnumbers1 = int(''.join(str(b) for b in rgbValue), 2)
            #print pixelnumbers1
            rgb_Array.append(pixelnumbers1)
        pixels[x, y] = (rgb_Array[0], rgb_Array[1], rgb_Array[2])
        print "Completed"
        return imageObject.save(output)

我一直在尝试加密pixelnumbers1然后将其添加进去。但是pixels[x, y]需要一个整数。在

以下是代码的其余部分,以防:

^{pr2}$

Tags: the数据字符串in图像程序for整数
1条回答
网友
1楼 · 发布于 2024-07-02 14:24:14

你对计算机如何看待任何类型的数据有一个根本的误解。在

您读取文件的bytestream,它看起来像一个字符串,但是每个字符实际上是一个字节,一个从0到255的值。它们中的一些是由传统的字符串字符表示的。请尝试print(bytes(range(256))查看它们。大多数标准的加密函数接受一个字节数组,然后抛出一个字节数组。只是碰巧你得到了更多没有“简单”表示的字节。但是它们并不比你最初输入的字节少。在

你的dcimage.py包括以下内容:

#get the file data in binary
fileData = bytearray(open(secret, 'rb').read())#opens the binary file in read or write mode
for bits in fileData:
    binDataString += bin(bits)[2:].zfill(8)#convert the file data to binary

没有什么能阻止你这么做的

^{pr2}$

非常重要:在消息末尾添加一个空字节,以便提取序列知道何时停止。如果压缩或加密字符串(或字节数组),则空字节很可能是该流的一部分,这将中断提取序列。在这种情况下,您需要使用一个header,它提前告诉您的程序要提取多少位。在


顺便说一下,字节已经是整数形式了。在

>>> some_byte = b'G'
>>> some_byte[0]
71

最好使用bitwise operations进行隐写。取字节,而不是在它们和像素之间使用按位运算,而是将二者都转换为二进制字符串,对它们进行切片和缝合,然后将它们还原为整数。在

def bytes_to_bits(stream):
    for byte in stream:
        for shift in range(7, -1, -1):
            yield (byte >> shift) & 0x01

secret_bits = tuple(bytes_to_bits(encoded_data))

# simplified for one colour plane
for x in range(image_height):
    for y in range(image_width):
        # (pixel AND 254) OR bit - the first part zeroes out the lsb
        pixels[x,y] = (pixels[x,y] & 0xfe) | secret_bits[count]
        count += 1

#                   -

# to extract the bit from a stego pixel
bit = pixel & 0x01

相关问题 更多 >