Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용한 이미지 기반 스테가노그래피?

<시간/>

스테가노그래피는 이면에 정보를 숨기는 기술입니다. SHA1, MD5 등과 같은 다른 알고리즘을 통해 데이터를 암호화하는 데 중점을 둔 암호화와 달리 스테가노그래피는 다른 파일, 이미지, 메시지 또는 비디오 내에서 데이터(데이터는 파일, 이미지, 메시지 또는 비디오일 수 있음)를 숨기는 데 더 중점을 둡니다. 매력을 피하기 위해.

그래서 여기에서 우리는 이미지 모양의 눈에 띄는 변화 없이 이미지 뒤에 정보를 숨기는 간단한 파이썬 프로그램을 만들려고 노력할 것입니다. 프로그램에는 두 가지 주요 부분이 있습니다. 첫 번째는 이미지 파일에서 비밀 정보를 추출할 수 있는 디코딩 기능이고 두 번째는 비밀 메시지를 이미지로 인코딩하는 인코딩 기능입니다.

우리는 이 목적을 위해 Python Pillow 라이브러리를 사용합니다(Cv 또는 다른 사람도 열 수 있습니다 ☺). pip를 사용하여 설치할 수 있습니다. 명령 프롬프트에서 pip install pillow를 실행하기만 하면 됩니다.

$pip install pillow

픽셀 및 색상 모델의 기본 개념:

픽셀은 이미지의 가장 작은 개별 요소입니다. 따라서 각 픽셀은 원본 이미지의 일부를 나타냅니다. 즉, 픽셀이 높을수록 실제 사진의 표현이 더 높거나 훨씬 정확합니다.

흑백 이미지(회색조가 아님)에서 검은색 픽셀은 값 1을 가지며 흰색 픽셀은 값 0을 갖습니다. 반면에 컬러 이미지에서는 세 가지 주요 색상 구성요소(RGB-빨간색, 녹색, 파란색)가 있습니다. 각 픽셀에 대해 0-255 값. 따라서 (255, 255, 255)의 픽셀은 흰색을 나타내고 (0,0,0)은 검은색을 의미합니다. 8비트 이진수가 255를 나타낼 수 있는 최대 수는 가 우리가 갈 수 있는 최대 수입니다.

이진수의 밑이 2이므로 이진수를 십진수로 매우 쉽게 변환할 수 있습니다. 이진수가 01010101이고 이에 해당하는 십진수(밑수 10)는 다음과 같습니다.

26 +24 + 22 + 20 = 64 + 16 + 4 + 1 = 85

파이썬 터미널에서도 바이너리에서 십진수로의 변환을 위에서 테스트할 수 있습니다.

>>> print(0b01010101)
85
>>> type(0b01010101)
<class 'int'>
>>> 0b01010101
85
>>> 0b01010110
86

이를 달성하는 방법:

Step 1: Import the required library/package.
Step 2: Open the file or Image
Step 3: Encode some text into the source Image & then save it.
Step 4: Check both the images (with and without hidden data file) and see if there is any visible changes.
Step 5: Decode the image- to extract data from the image

위 단계의 구현:

예시 코드

>>> #Import the required library
>>> from PIL import Image
>>> import stepic
>>>

인코딩 및 디코딩 목적으로 계단식 라이브러리를 사용했습니다. pip를 사용하여 단계별 라이브러리를 설치할 수 있습니다.

Python을 사용한 이미지 기반 스테가노그래피?

>>> #Open Image or file in which you want to hide your data
>>> im = Image.open('TajMahal.png')
>>>
>>> #Encode some text into your Image file and save it in another file
>>> im1 = stepic.encode(im, b'Hello Python')
>>> im1.save('TajMahal.png', 'PNG')
>>>
>>> #Now is the time to check both images and see if there is any visible changes
>>> im1 = Image.open('TajMahal.png')
>>> im1.show()

숨겨진 텍스트가 있는 이미지:

Python을 사용한 이미지 기반 스테가노그래피?

Actual image:
>>> im.show()
>>>'

Python을 사용한 이미지 기반 스테가노그래피?

>>>
>>> #Decode the image so as to extract the hidden data from the image
>>> im2 = Image.open('TajMahal.png')
>>> stegoImage = stepic.decode(im2)
>>> stegoImage
'Hello Python'

따라서 이미지 뒤에 텍스트를 숨기는 것이 얼마나 쉬운지 알 수 있습니다. 비디오 또는 jpeg와 같은 다른 형식과 같은 다른 입력 항목을 사용할 수 있으며 다른 라이브러리를 사용하여 동일한 결과를 얻을 수 있습니다. Happy Steganography with Python ☺