信息隐藏课程之简单的LSB最低位隐写

# -*- coding: utf-8 -*-
_author_ = 'xiao_lu'
#取出RGB 值得 lsb  替换
import Image
import matplotlib.pyplot as plt

#得到加密文字的二进制形式
def plus(str):
   return str.zfill(8)
def get_key():
   f = file("D:\\zip1.txt", "r")
   str = ""
   s = f.read()
   print s
   for i in range(len(s)):
      str=str+ plus(bin(ord(s[i])).replace('0b', ''))
   print str
   f.closed
   return str
def mod(x,y):
    return x%y;

if __name__ == '__main__':
  im = Image.open("d:/lena.jpg")
  plt.subplot(1, 2, 1), plt.title('origin')
  plt.imshow(im), plt.axis('off')
  width = im.size[0]
  height = im.size[1]
  count = 0
  key = get_key()  #得到 文本信息
  #如果嵌入的文字过多导致载体不够大
  if width*height*3


解密过程


# -*- coding: utf-8 -*-
_author_ = 'xiao_lu'

import Image
def mod(x,y):
    return x%y;
#将得到的二进制串化成ASCII码
def toasc(str):
    return int(str, 2)
if __name__ == '__main__':
  a=""
  im = Image.open("d:/lena_rgb.bmp")
  f1 = file("D:\\zip1.txt", "r")
  s = f1.read()
  lenth = len(s)
  width = im.size[0]
  height = im.size[1]
  count = 0
  #直接提取最后一位 基于rgb三个图像
  for h in range(0, height):
       for w in range(0, width):
           pixel = im.getpixel((w, h))
           if count ==lenth*8:
               break
           if count%3==0:
               a = a+str((mod(int(pixel[0]),2)))
           elif count%3==1:
               a=a+str((mod(int(pixel[1]), 2)))
           else:
               a=a+str((mod(int(pixel[2]), 2)))
           count+=1
       if count == lenth*8:
           break
  print a#输出二进制
  print len(a)
  #将得到的明文写到文本
  with open("d:/zip2.txt","w") as f:
       for i in range(0,len(a),8):
           str = toasc(a[i:i+8])#化成ASCII码
           print chr(str)#输出明文
           f.write(chr(str))
           str =""
  f.closed


你可能感兴趣的:(python学习)