
Python을 사용한 스테가노그래피 | 이미지 파일에 파일 또는 데이터 숨기기
이 스크립트는 파일을 이미지 내에 숨기고 수정된 이미지를 디스크에 저장합니다.
이미지 내에 숨길 수 있는 파일의 최대 크기는 이미지의 크기에 따라 달라집니다.
max_file_size = ( height_of_image * width_of_image * 6 / 8 ) bytes
'100k words.txt'는 'original_image.png'에 숨겨져 'image_with_100k words.png'로 저장됩니다. 이 두 이미지의 차이를 찾을 수 있는지 확인해보세요. 이 모듈을 사용하여 'image_with_100k words.png'에서 '100k words.txt'를 추출할 수 있습니다.
원본 이미지

수정된 이미지

이 이미지에는 10만 개의 단어(텍스트 파일)가 숨겨져 있습니다!
이것은 각 픽셀의 LSB(최하위 비트)를 변경하면 변화가 눈에 띄지 않을 것이라는 간단한 원리에 기반합니다.
따라서 이 모듈은 숨길 파일에서 2비트의 데이터를 가져와 한 픽셀의 마지막 2비트를 그 2비트로 대체한 후 다음 픽셀로 이동합니다. 픽셀의 최대 변화는 4 단위이며, PNG 이미지의 값 범위는 (0,255)이므로 이 변화는 미미합니다.
PNG 이미지에서 각 픽셀은 빨강, 초록, 파랑의 3개 채널을 가집니다. (일부 PNG 이미지는 1개 또는 4개의 채널을 가지지만, 이 프로그램은 이를 3채널로 변환합니다.) PNG 이미지의 일반적인 픽셀은 다음과 같습니다:
a_pixel = (17,32,11) # (RED, GREEN, BLUE)
따라서 픽셀당 3번의 2비트, 즉 픽셀당 6비트를 저장할 수 있습니다. 이는 이미지에 숨길 수 있는 파일 크기의 상한선을 결정합니다:
max_file_size = ( height_of_image * width_of_image * 6 / 8 ) bytes
예를 들어 이해해 봅시다. 숨길 데이터는 다음과 같습니다:
binary_data = 0b100111
처음 두 비트를 가져와 'a_pixel'의 RED 채널에 대체해 봅시다.
a_pixel = (0b10001, 0b100000, 0b1011) # binary representation of a_pixel values
# Let's change a_pixel's RED Channel
# 0b10001 -> 0b10010 ( First 2 bits are 10 )
a_pixel = (0b10010, 0b100000, 0b1011) # modified pixel
다시 binary_data에서 2비트를 가져와 GREEN 채널의 마지막 2비트를 대체해 봅시다.
a_pixel = (0b10010, 0b100000, 0b1011)
# Let's change a_pixel's GREEN Channel
# 0b100000 -> 0b100001 ( The 2 bits are 01 )
a_pixel = (0b10010, 0b100001, 0b1011) # modified pixel
BLUE 채널에 대해 한 번 더 수행하면 완료됩니다.
a_pixel = (0b10010, 0b100001, 0b1011)
# Let's change a_pixel's BLUE Channel
# 0b1011 -> 0b1011 ( The 2 bits are 11 ) ; Notice that the value wasn't changed this time
a_pixel = (0b10010, 0b100001, 0b1011) # pixel wasn't modified this time
이제 6비트 메시지를 픽셀에 숨겼습니다. 픽셀의 변화를 살펴보겠습니다.
a_pixel = (0b10001, 0b100000, 0b1011) = (17, 32, 11)
a_pixel_with_data = (0b10010, 0b100001, 0b1011) = (18, 33, 11)
보시다시피 변화는 픽셀 수준에서도 눈에 띄지 않습니다. 모듈은 모든 데이터가 이미지에 저장될 때까지 이 작업을 반복합니다.

참고: 사진의 노이즈가 증가하며, 사진 편집 소프트웨어를 사용하여 원본 이미지와 비교하면 이 이미지가 원본 이미지보다 훨씬 더 많은 노이즈를 가집니다.
이 문제에 대한 해결책: 원본 이미지를 절대 인터넷에 업로드하거나 공유하지 마세요.
MIT
무료 소프트웨어, 그래!