首页
随机
最近更改
特殊页面
社群首页
参数设置
关于WHY42
免责声明
WHY42
搜索
用户菜单
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁LSB算法”︁的源代码
←
LSB算法
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
=隐写术= 隐写术是指将数据隐藏到载体文件中的方法,载体文件(cover file)相对隐秘文件的大小(指数据含量,以比特计)越大,隐藏后者就越加容易。 因为这个原因,数字图像(包含有大量的数据)在因特网和其他传媒上被广泛用于隐藏消息。这种方法使用的广泛程度无从查考。例如:一个24位的位图中的每个像素的三个颜色分量(红,绿和蓝)各使用8个比特来表示。如果我们只考虑蓝色的话,就是说有28种不同的数值来表示深浅不同的蓝色。而像11111111和11111110这两个值所表示的蓝色,人眼几乎无法区分。因此,这个最低有效位就可以用来存储颜色之外的信息,而且在某种程度上几乎是检测不到的。如果对红色和绿色进行同样的操作,就可以在差不多三个像素中存储一个字节的信息。 =LSB(LeastSignificantBits)算法= LSB即最低有效位算法。假设数据文件有8个字节,我们利用每一个字节的最小位,来存储一个隐藏字节的1bit,这样每8个byte的数据文件就可以隐藏1byte的隐藏数据。例如,假设数据文件的8个字符为: <source lang="lisp"> 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff </source> 我们要隐藏一个'h'字符,假设使用ASCII码,'h'=104=0x68=1101000(2)。我们采取算法: <source lang="cpp"> char arr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; char s = 'h'; for (int j = 0; j < 8; j++) { char t = arr[j]; t &= 0xFE; //FE, to make sure LSB is always zero t|= (char)((h >> j) & 1); arr[j] = t; } </source> 则完成后,数据为: <pre> 1 2 3 4 5 6 7 8 0 1 1 0 1 0 0 0 fe fe fe ff fe ff ff fe </pre> 解密时: <source lang="cpp"> char ch = 0; char byte[] = {fe, fe, fe, ff, fe, ff, ff, fe }; for (int b = 7; b >= 0; b--) { ch += (byte[b] & 1); if (b != 0) ch <<= 1; } </source> [[Category:Algorithm]]
返回
LSB算法
。