LSB低位隐写

近期新学会的加密方式(不愧是我)

LSB低位隐写原理

基于不可感知的要求,即数据的变化几乎不会引起使用的者的察觉,将水印信息嵌入到数据的最低有效位(Least Significant Bit),也就是将图片的RGB数值转换为二进制数据,然后用水印替换掉最低位,这种变化对于人眼来说是不可察觉的。当然,水印的形式也是多种多样的,有图片,文字等。这里主要讲文字(图片还是没搞太懂,之后肯定会学会的,立个flag!!)

注意!!

1.预先下的包(py代码解决)
from PIL import Image
2.LSB低位隐写一般用于bmp和png图片

思路

(1)获取要隐藏的数据,一般这里不管是什么,我们都可以理解为字符串。
(2)将获取到的字符串二值化,即按照一定规则转换为二进制数据,一般是8位(不涉及中文隐写,中文占2个),不够的前面补0,一定要测试好对应的解码方法。
(3)准备好宿主图像,安装好python环境和PIL。
(4)获取图像信息(主要是高度和宽度),根据二值化后的字符串的长度,对宿主图像的像素进行遍历,然后将数据依次写入对应像素的最低有效位,写入完成之后跳出循环,对目标图像进行持久化即可得到载密图像。

代码


120
121
122
123
124
125
#coding=utf-8
#coding=utf-8
try:from PIL import Imagefrom PIL import ImageFile
except:import osos.system('pip install Pillow')from PIL import Imagefrom PIL import ImageFileImageFile.LOAD_TRUNCATED_IMAGES=Truedef full_eight(str):return str.zfill(8)
def get_text_bin(strr):string=""s_text=strr.encode()for i in range(len(s_text)):string=string+full_eight(bin(s_text[i]).replace('0b',''))return string
def mod(x,y):return x%y
def tell_you_bad(str1,str2,str3):im=Image.open(str1)width=im.size[0]height=im.size[1]count=0key=get_text_bin(str2)keylen=len(key)for h in range(0,height):for w in range(0,width):pixel=im.getpixel((w,h))a=pixel[0]b=pixel[1]c=pixel[2]if count==keylen:breaka=a-mod(a,2)+int(key[count])count+=1if count==keylen:im.putpixel((w,h),(a,b,c))breakb=b-mod(b,2)+int(key[count])count+=1if count==keylen:im.putpixel((w,h),(a,b,c))breakc=c-mod(c,2)+int(key[count])count+=1if count==keylen:im.putpixel((w,h),(a,b,c))breakif count%3==0:im.putpixel((w,h),(a,b,c))im.save(str3)
def tell_you_fun(le,str1):a=""b=""im = Image.open(str1)lenth = le*8width = im.size[0]height = im.size[1]count = 0for h in range(0, height):for w in range(0, width):pixel = im.getpixel((w, h))if count%3==0:count+=1b=b+str((mod(int(pixel[0]),2)))if count ==lenth:breakif count%3==1:count+=1b=b+str((mod(int(pixel[1]),2)))if count ==lenth:breakif count%3==2:count+=1b=b+str((mod(int(pixel[2]),2)))if count ==lenth:breakif count == lenth:breakst=""for i in range(0,len(b),8):stra = int(b[i:i+8],2)st+=chr(stra)return st
def main():print("加密(1) OR 解密(2):",end=' ')choice=int(input())if choice==1:try:print("[+]加密图片:",end=' ')old=input()print("[+]加密文字(以#号结束):",end=' ')kkk=input()print("[+]加密图片保存重命名:",end=' ')new=input()tell_you_bad(old,kkk,new)print("[+]Fun Picture done!")except:print("[-]未找到此图片,请检查图片名和路径")if choice==2:le = 30try:print("[+]解密图片:",end=' ')new = input()word=tell_you_fun(le,new).split('#')print('[+]Picture Tell You: ',word[0])except:print("[-]未找到此图片,请检查图片名和路径")
if __name__=="__main__":main()

总结

1.这种方法隐写比较容易发现
2.加密过程有点难理解

写的还是比较粗糙,会慢慢添加的

LSB低位隐写(菜鸡理解)相关推荐

  1. 关于LSB图片隐写的解法

    关于LSB图片隐写的解法 LSB全称为 least significant bit,是最低有效位的意思.Lsb图片隐写是基于lsb算法的一种图片隐写术. 隐写是一种信息隐藏技术,这项技术目标是使对方对 ...

  2. python图片隐写_机窝安全--LSB图片隐写

    人类能说识别大概1000万中颜色,而BMP等的三原色有从0x00~0xFF,也就是有256的3次方,大概是1600多万,也就是说人类大概有600万颜色无法识别,但是机器并不是通过像素识别,而是通过该像 ...

  3. 信息隐藏隐写系统框架

    信息隐藏中隐写是其中很重要的一部分.本文通过一段时间的CTF的学习结合个人CTF比赛杂项选手的刷题经历总结.对一部分自己所学过的隐写进行系统的概括. 隐写 隐写相关概念 定义 隐写分析(stegana ...

  4. CTF学习之MISC之图片隐写与文档隐写

    CTF学习之MISC之图片隐写 隐写术概述 图片隐写技术 图片EXIF信息隐写 图片LSB低位隐写 隐写术(Stega) 隐写术(Steganography,简写Stega) 一门关于信息隐藏的技巧与 ...

  5. laravel改代码没变化_菜鸡程序员是如何写代码的?

    每个程序员都要历经从菜鸡到大牛过程蜕变胡过程.当初大家起点都差不多,工作多年后,有些人依然停留在菜鸡,有些人却已成为大牛,所有的事情,都是一点一滴习惯养成.让我们看看菜鸡程序员是如何写代码的?有可能找 ...

  6. 基于MatLab实现LSB(最低有效位)算法完成图片数字水印隐写功能

    文章目录 前言 一.图像处理基础 二.LSB数字隐写算法 三.LSB数字隐写算法实现 四.数字隐写和提取过程 总结 前言 已经好久没写博客了,最近是在有些忙,但是忙里偷闲写一篇新学的知识点,所以准备写 ...

  7. LSB顺序+随机隐写和提取(matlab)

    LSB 首先肯定要清楚什么是LSB图像隐写,这里我推荐一个文章 LSB图片隐写 顺序 其实我觉得代码上没什么好解释的,只是按照这个LSB的原理进行操作. 不过我为了能更好.更方便的得到隐写的信息,当要 ...

  8. 图片LSB隐写(java)

    一.隐写原理 LSB隐写原理就是图片中的像素一般是由三种颜色组成,即三原色(红绿蓝).由这三种原色可以组成其他各种颜色,在png图片的存储中,每个颜色占有8bit,即有256种颜色,一共包含256的三 ...

  9. 浅谈LSB隐写解题与出题

    点击"蓝字"关注,获取更多技术内容! 前言:LSB隐写在CTF中属于出现得比较多的类型.这篇文章对LSB隐写的原理,解题方法,出题脚本,以及LSB隐写特性进行研究. LSB隐写原理 ...

最新文章

  1. 同义词词林 java_基于同义词词林扩展版的词语相似度计算
  2. python环境搭建_搭建Python编程环境
  3. 浅析如何才能提高网站的信息交互能力?
  4. 点云插值:三维平面参数确定-不共线三点的平面方程
  5. 老赖整治升级,不还钱直接扣微信钱包!
  6. django-一对一关系
  7. 问题解决 xenapp6/6.5发布资源管理器explorer应用不能打开 一闪而过
  8. BZOJ2059: [Usaco2010 Nov]Buying Feed 购买饲料
  9. c51单片机蜂鸣器程序C语言响,单片机蜂鸣器响生日快乐编程程序
  10. c语言计算器程序代码 链栈,【C语言】简易科学计算器源代码(链栈应用)(原创).doc...
  11. centos 安装 Pip 的方法总结
  12. Linux shell脚本详解及实战(二)——shell脚本之分支
  13. 离地球近的星星,远离情况怎样?
  14. 2021全国职业技能大赛-网络安全赛题解析总结②(超详细)
  15. 医学影像-深度学习综述
  16. js 时间转东八区_js将UTC时间转化为当地时区时间
  17. 怎么生成a类型的对象 java_用一个 java 程序! 写一个类A, 该类创建的对象可以调用方法f输出英文字母表,然后再编写...
  18. 按址索骥,直捣黄龙-指针法在字符串str中每个ch2字符后都添加一个ch3字符
  19. HCSR04超声波传感器驱动
  20. 巨量算数 Data解密

热门文章

  1. 函数名和变量名重名问题
  2. 别让用户发呆—设计中的防呆的6个策略
  3. mysql 查询 投影_sql--查询(基本,条件,投影,排序)
  4. 复现lio_sam激光slam算法创建点云地图
  5. c 超文本标记语言,网页制作的超文本标记语言称为() - 问答库
  6. ORACLE锁定账户的原因及解决办法
  7. AI如何走向精智能之路?
  8. java count sql_SQL优化之SELECT COUNT(*)
  9. Oracle 实验五:Oracle中的SQL使用
  10. c# MVC 网页开发