java lsb Java LSB隐写:像素里藏秘密,一眼看穿你的小心思

发布时间:2026/6/30 22:58:48
java lsb Java LSB隐写:像素里藏秘密,一眼看穿你的小心思 那么怎么隐写呢这次给大家讲解的隐写方式便是LSB(最低有效位)隐写。之前的文中, 我们讲过位图, LSB隐写是针对这种格式图片的, 一种隐写方式。前文提到, 位图, 是那种由一个个小方格构成的, 这些小方格密密麻麻且有着各种颜色, 它们一行一行地排列开来, 最终形成的精美图片。这个小方格我们称其为像素点。需这些像素点, 其颜色纷繁多样各不相同才可组合形成眼前所见这幅色彩斑斓的图, 那么, 我们所用的计算机究竟是怎样去进行识别从而使每个像素点的颜色产生变化的呢?大家应当清楚红R、绿G、蓝B这三元色, 借助调配这三种色彩, 我们能够获取所有具备的颜色, 在用于运算的机器里, 每个像素点所呈现的颜色是经由调配其中、、的占据成分数值进而得以构成的, 这就意味着, 每个颜色所对应的像素点, 在机器的操作概念里皆是一组关于、、的值。就如同下面所呈现的图示那样, 我们把白色给挑选出来了, 进而识别出它的R值是255, 它的G值是255, 它的B值是255。对计算机说来, R、G、B这三种颜色里每个颜色所对应的那个值都是一个位于8位的二进制数, 所以, 当计算机进行读入操作时, 实际上这三元色的值分别是,,,因而, 就计算机来讲, 它所看到的这么一个像素点实际上就是11这么一个二进制型的串, 我们把它称作这像素点的RGB码(二进制), 为了便于人阅读, 我们这些人常常会把这串二进制串写成十六进制的形式, 也就是#, 这同样是这个像素点的RGB码(十六进制)。既然对于计算机来讲, 每一个这样的像素点是一串二进制串, 像: 11 这样, 并且我们在前面的文字当中已经提及一张位图是由一行一行紧密排列的像素点所构成的, 那么如此的一张图, 难道不正是一行一行的二进制串吗示意图如下所示那么我们怎么把JUST{}隐写进去呢我们清楚, 于计算机里, 每个字符事实上是以ascii码予以表示的, 那么我们此刻将每位字符转变成其对应的八位二进制ascii码形式, 便可获取到该字符串是如此这样一个二进制串:00 01 00 01 00当我们把需隐写的信息转化成这样一串二进制串之后, 我们便着手将其隐写于这个图片之中, 此刻, 隐写开始, 正儿八经地开启程序运转此刻, 我们把方才转换而成的二进制串, 其每一个二进制位, 按照从左到右的顺序, 逐一写入上文所提及的图片的每一次八个二进制位的最低位, 也就是逐个写入图片像素点由R、G、B值所构成部分的最低各位。例如按照这样的方式进行写入之后, 信息的每一个位, 便被我们隐匿到了像素点的R、G、B所对应的8位二进制码的末尾位置也就是最低的位, 所以, 这样的一种隐写方式, 才被我们认定为称作LSB最低有效位隐写。我们把信息写入之后, 却无法看出图片有多大程度的变化, 原因究竟为何呢? 前面已然讲过, 在计算机里, 每个像素点的颜色是经由调配其R、G、B的所占成分值进而获取的, 那么按照我们这般隐写方式, 信息被写入R、G、B的最低位, 要是R、G、B的最低位因我们的写入而出现变化, 不外乎便是1变成了0或者0变成了1, 从数值层面来讲, 被我们隐写过的R、G、B值, 最多只会变化1。就这么针对每一个像素点来讲, 它的R成分发生的变化是不大明显显著地微小的, g成分进行的改变也是极为不显眼轻微的, B成分产生的浮动同样是相当不容易被发觉细微的, 颜色基本上几乎是没有什么改变变化的, 因而人的肉眼是很难不容易察觉到这般的变动变化的, 所以信息才能够悄无声息不被轻易发现地被我们隐匿藏进去下方呈现的是, 经由实现的, 把信息隐匿进这幅.bmp图里的代码达成情况(注释针对有着关键功能的代码给出了说明, 要是想掌握具体函数的详细情况, 能够自行去百度(百度: XXX函数), 这里的XXX乃是你没看明白的函数的名称, 肯定是能够搜索到的。