系列文章目录
仿射密码实验-Python实现
仿射密码实验——Python实现(完整解析版)
DES密码实验-C语言实现
MD5密码实验——Python实现(完整解析版)
前言
1)了解图像平面位
2)掌握LSB信息隐藏的实现
实验方法
根据给出的LSB算法的描述,用所熟悉的语言,完成实验内容并简要描述实验操作步骤。
实验环境
计算机语言:Python
开发环境:Pycharm
实验内容
根据LSB算法完成LSB信息隐藏的实现。包括:信息嵌入、信息取出。
实验步骤
1.LSB原理
每个像素点的颜色RGB可以用十进制0~255的数值表示。LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而且每一个像素位点携带了一位信息,那么就可以利用八个字节的最低位存储一个比特信息,而该比特信息则可以转化为ASCII字符,从而达到隐写信息的目的。
2.确定设计模块
1.lsb_embed
2.lsb_extract
3.main函数(主程序)
项目架构:
Pic:存放图片
Txt:存放待嵌入信息和提取后信息
LSB-main:运行程序文件
Lsb——embded
1.用PIL库的Image读取图片像素信息
2.利用numpy库将读取的像素信息处理为矩阵
3.输入路径,读取待隐写的文件,将之前读取的图片一并拷贝
4.对每位字符进行ASCII处理,取到的二进制数由6位填充至8位
自定义函数cover_lsb进行lsb隐写操作
对于最低有效位LSB,用if判断进行替换选择二进制为0还是1
5.剩余未填充位进行补充填位,使得图像能够恢复
6.再使用处理后的新矩阵来生成嵌入图片
Lsb——extract
1.用PIL库的Image读取图片像素信息
2.利用numpy库将读取的像素信息处理为矩阵
3.提取过程中寻找最低位
4.用到lsb_decode来找寻最低位并返回
5.得到的数据进行二进制转ASCII的操作
实验结果
开启程序
1.隐写
进行人眼观察,嵌入信息后的图片与原图看不出明显差别
2.提取
提取的信息与原信息进行比对后,确认提取信息成功。
实验心得
本次实验做了关于LSB信息隐藏的实现,接触到了LSB作为一种隐写术的优缺点,比如它的原理十分简单,可以通过一些脚本快速实现嵌入信息,且嵌入后的图片psnr值得到保证的情况下就不容易被人眼看出,实现数据隐写;但同时它的鲁棒性不佳,相对于数字水印,容易通过工具如stegsolve进行分析得出或者脚本程序进行信息提取。
对于本次实验的代码,在提取部分是通过原始信息的长度来确定遍历的次数,在实际过程中一般是不知道提取信息的长度,这时候就需要尽量将遍历长度设置大一些,这样就算超过原始信息长度也可以通过无意义字符进行排除,从而获取最后的有效信息。
完整代码
# -*- coding: utf-8 -*-
# @Time : 2022/10/17 14:38
# @Author : 4v1d
# @File : LSB-main.py
# @Software: PyCharm
import numpy as np
import PIL.Image as Image
def lsb_embed(pic_src,file_src):
# 读取图片的像素信息
picture = Image.open('{}'.format(pic_src))
pic_data = np