Я пытаюсь получить текст, который скрыл внутри изображения BMP, но когда я хочу преобразовать его в ASCII, у меня появляется следующая ошибка: «UnicodeDecodeError: код« utf-8 »c может не декодировать байт 0x94 в позиции 1: недопустимый начальный байт ". Я не знаю, какое кодирование использовать, чтобы оно работало. Может быть, другой способ скрыть текст внутри файла BMP с помощью подстановки LSB (сделать преобразование непосредственно с байтами?)
Это мой код:
import binascii
import struct
from bitstring import BitArray
def str2bin(text, encoding='utf-8', errors='surrogatepass'):
bits = bin(int.from_bytes(text.encode(encoding, errors), 'big'))[2:]
return bits.zfill(8 * ((len(bits) + 7) // 8)) # each ASCII character is 8 bits
def bin2str(text, encoding='utf-8', errors='surrogatepass'):
n = int(text, 2)
return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode(encoding,errors) or '\0'
def writeNewBMP(imageSource, textBuffer):
inputImage = open(imageSource, 'rb')
bufferInfo = inputImage.read()
inputImage.close()
headerOffset = 805
j = -1
bufferInfo = BitArray(bufferInfo).bin[1:]
bufferTemp = list(bufferInfo)
for i in range(headerOffset, len(bufferTemp), 7):
if i < len(textBuffer):
bufferTemp[i] = textBuffer[j]
j += 1
bufferTemp = "".join(bufferTemp)
bufferTemp = int(bufferTemp, 2).to_bytes((len(bufferTemp) + 7) // 8, 'big')
outputImage = open('Python/Assign05/embedded_image_LSB.bmp', 'wb')
outputImage.write(bufferTemp)
outputImage.close()
def extractFile(BMPFile):
embeddedFile = open(BMPFile, 'rb')
bufferBin = embeddedFile.read()
embeddedFile.close()
headerOffset = 805
j = -1
bufferBin = BitArray(bufferBin).bin[1:]
bufferTemp = ""
print(type(bufferBin))
for i in range(headerOffset, len(bufferBin), 7):
bufferTemp += bufferBin[i]
fp_declaratfpDeclarationOfIndependantFromBit = open("Python/Assign05/test_return.txt", "a")
fp_declaratfpDeclarationOfIndependantFromBit.write(bin2str(bufferTemp))
fp_declaratfpDeclarationOfIndependantFromBit.close()
###################################
# Transformation Text to Binary
###################################
fpDeclarationOfIndependant = open("Python/Assign05/Declaration_of_Independence.txt", "r")
# Store input text in a string buffer
bufferInputFile = fpDeclarationOfIndependant.read()
fpDeclarationOfIndependant.close()
# Transform text to binary
bufferInputFileBin = str2bin(bufferInputFile)
###################################
# Open BMP file and LSB
###################################
writeNewBMP('Python/Assign05/ballons_rgb.bmp', bufferInputFileBin)
###################################
# Transformation Binary to Text
###################################
extractFile('Python/Assign05/embedded_image_LSB.bmp')
Спасибо