LSB 全称为 least significant bit,是最低有效位的意思。Lsb 图片隐写是基于 lsb 算法的一种图片隐写术,以下统称为 lsb 隐写,这是一种常见的信息隐藏方法。通常是把src图像写入dst图像,但我们肉眼去看却并不能分辨被写入src图像的dst图像与没有被写入的dst图像有任何区别。
bmp图像是位图,比如 800 600大小的一张32位bmp图像,除了bmp文件头54字节之外,后面就是存储的位图信息,位图信息通常由rgba来排列,24位的bmp图像就是按照rgb来排列,每个像素点分别由argb分量,每个分量都是一个char来表示,所以bmp的大小应该是 800 * 600 * 4 + 54 = 1920054个字节。
而每个分量由4字节,32位来表示,比如颜色 a分量数值是101,也就是 0110 0101,咱们把这个数的最低位从1改成0,那么a变成100,也就是 0110 0100,我们肉眼是察觉不出来的。常用的隐写术是将后两位都设置成0,也就是说,哪怕103(01100111)被改成100(01100100),我们肉眼也看不出来。
所以文字盲水印的原理就是,把文字字符串转成二进制,然后依次替换bmp位图的末bit位,这样就达到了效果
那试试把文字串通过隐写加入到bmp中,看看图像有什么变化,直接上代码
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <errno.h>
#include <pixman.h>
#define MAX_WATERMARK_LEN 100
#pragma pack(2)
typedef struct BITMAPFILEHEADER
{
uint16_t bfType;
uint32_t bfSize;
uint16_t bfReserved1;
uint16_t bfReserved2;

本文介绍了LSB(最低有效位)隐写术如何将文字字符串隐形地嵌入BMP图像中,通过修改图像像素最低位实现文字水印,展示了代码示例和实际操作效果。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



