69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Created on Sun May 19 12:43:26 2019
|
||
|
||
@author: Administrator
|
||
"""
|
||
|
||
from PIL import Image
|
||
|
||
def mod(x,y):
|
||
return x%y
|
||
|
||
def toasc(strr):
|
||
return int(strr, 2)
|
||
|
||
|
||
#le为所要提取的信息的长度,str1为加密载体图片的路径,str2为提取文件的保存路径
|
||
def func(le,str1,str2):
|
||
b=""
|
||
im = Image.open(str1)
|
||
lenth = le*8
|
||
width,height = im.size[0],im.size[1]
|
||
count = 0
|
||
for h in range(height):
|
||
for w in range(width):
|
||
#获得(w,h)点像素的值
|
||
pixel = im.getpixel((w, h))
|
||
#此处余3,依次从R、G、B三个颜色通道获得最低位的隐藏信息
|
||
if count%3==0:
|
||
count+=1
|
||
b=b+str((mod(int(pixel[0]),2)))
|
||
if count ==lenth:
|
||
break
|
||
if count%3==1:
|
||
count+=1
|
||
b=b+str((mod(int(pixel[1]),2)))
|
||
if count ==lenth:
|
||
break
|
||
if count%3==2:
|
||
count+=1
|
||
b=b+str((mod(int(pixel[2]),2)))
|
||
if count ==lenth:
|
||
break
|
||
if count == lenth:
|
||
break
|
||
|
||
with open(str2,"w",encoding='utf-8') as f:
|
||
for i in range(0,len(b),8):
|
||
#以每8位为一组二进制,转换为十进制
|
||
stra = toasc(b[i:i+8])
|
||
#将转换后的十进制数视为ascii码,再转换为字符串写入到文件中
|
||
#print((stra))
|
||
f.write(chr(stra))
|
||
print("完成信息提取!")
|
||
|
||
|
||
|
||
|
||
def main():
|
||
#文件长度
|
||
le = 11
|
||
#含有隐藏信息的图片
|
||
new = "new.png"
|
||
#信息提取出后所存放的文件
|
||
get_info = "get_flag.txt"
|
||
func(le,new,get_info)
|
||
|
||
if __name__=='__main__':
|
||
main() |