简单的数字水印加密技术
来源:互联网 发布:匡恩网络市值是多少 编辑:程序博客网 时间:2024/05/01 08:39
最近我一个朋友问谍战情节里是怎样办到将数据隐藏到一般图片里的,正好有一段时间我也研究过这个问题,既然他问了干脆我就写出来和大家也一起分享一下吧,大都是自己琢磨的,如有更加专业的做法欢迎大家讨论啊。
由于时间比较久远,当年研究的代码找了半天也没找到,其实原理很简单,就不重新编了吧,重点说说思路。
其实数字水印加密技术基本原理是很简单的,我们都知道,一张图片是由红绿蓝三个灰度矩阵组成的,每个灰度矩阵(二维数组)又包含很多个灰度值,灰度值范围为0~255,占8位。这些都是数字栅格图的基本常识,如果不太明白的话可以上网查查相关资料。
现在我们说说这些灰度是怎么隐藏我们秘密的。灰度共分为256个级,但事实上,人眼根本就区分不出5和6、34和35等等这些靠的很近的灰度值,也就是说你在灰度值上面修改一两个值根本察觉不到图片有什么变化。简单的数字水印加密技术就是基于这个原理的。
具体怎么做呢?
第一步:将你需要加密的数据分解为二进制编码(也可以是8进制或10进制,但是2进制效果最好,16进制最好别用,估计明显能够看出图片做过手脚)。
第二步:按顺序将需要加密的每位二进制数据(0或者1)对应到图片的每个灰度值(如52),然后修改灰度值,使灰度值的最后一位与相应的二进制数据保持一致。比如说,第三位需要加密的二进制编码数据是1,第三个灰度值是00010100,那么修改后的灰度值就是00010101。
第三步:根据修改后的灰度值矩阵重新构建图片就好了,保证你看不出来带加密数据的图片和原图片有什么不一样。
加密这就完成了,那么解密呢?自然是按照你写进去的编码方式读出来就好了。
下面几个问题:
一、解密的时候如何知道读到结尾了没有?
可以设计一个结尾标识。
二、可不可以不从第一个灰度值开始记录加密数据?
可以,要设计一个密钥,告诉解密程序从哪里开始读取数据。
三、对数据不放心还可以进一步加密吗?
可以,设计复杂点的密钥,告诉解密软件数据读取数据的顺序和规则、异或计算的数据或其他加密方式的解密提示。比如:0010,1010,1011可能表达的意思是:从第3个灰度值开始是有效数据,有效数据里每读一个数据抛弃一个数据,数据解码的异或运算数字是1011。当然,这些密钥也可以是事先约定好的,也可以直接写在图片里,这就看你怎么设计了。
四、对图片有什么要求吗?
图片最好发杂一点,需要大一点,这种加密方式最多也就能加密点阵数量的3倍的数据,还是比较小的,如果需要加密更多数据可以考虑使用10进制,或者采用更加高效的编码方法。
五、除了加密传送数据,还可以干其他的吗?
可以,比如说通过对添加的水印进行复原可以检测你的图片是否被修改过等等。
- 简单的数字水印加密技术
- 简单的水印加密
- 基于数字水印技术的票据防伪
- 数字水印技术的基本概念和现状
- 数字水印技术的开发与应用
- 数字水印技术
- 数字水印技术
- 数字水印技术
- 数字水印技术
- 数字水印与防伪技术
- 数字水印与防伪技术
- MPEG-4视频数字水印技术的设计与实现
- MPEG-4视频数字水印技术的设计与实现
- MPEG-4视频数字水印技术的设计与实现
- 简单的加密解密技术
- 关于智能卡数字加密技术的分析
- 加密数字货币的开发技术介绍
- 数字水印的关键技术
- Ubuntu 10.04 DVD作为升级的源
- usb高速握手过程
- 树的定义definition
- hadoop常用命令
- 转载:Postgres-XC: online data redistribution
- 简单的数字水印加密技术
- JVM 性能监控与常用工具学习总结
- 默认构造函数
- UTMI及USB 2.0 PHY高速传输特性分析
- 在Mac下结合Xcode搭建Cocos2d-X开发环境!
- Codeforces Round #194 (Div. 2) D. Chips
- 转载:PostgreSQL-XC : Installation
- STM32F103 系列芯片读写AT45DB161芯片的程序和写入/读取字库文件的方法
- MySql中的流程函数