首页
闲言碎语
个人导航
文章归档
友情链接
留言簿
关于
更多
网络电视
云盘
统计
推荐
付费资源
朋友圈集赞
二维码生成
音乐下载
Search
1
全网首发-小米AX6000路由器解锁ssh并固化ssh+2.5G有线mesh组网+公网访问路由后台+红米AX6/小米AX6/AX3600/AX6000/AX9000全系列适用
6,823 阅读
2
青龙面板必装依赖及青龙各种问题解决
3,934 阅读
3
NAS一键批量清除重复文件
3,543 阅读
4
群辉DSM7.0.1安装bootstrap后解决wget: error while loading shared libraries: libgnuintl.so.8: cannot open shared object file: No such file or directory
1,605 阅读
5
《爱情公寓4》全集高清迅雷下载
903 阅读
闲言碎语
学习
福利
技术百科
WordPress
Typecho
软件资源
iPhone
Android
PC软件
CODE
C
VB
PHP
NAS
青龙
登录
Search
标签搜索
wordpress
News
iphone
vb
iOS
technology
渗透
QQ
php
talk
JavaScript
hack
Typecho
NAS
福利
c++
diy
c
免杀
评测
Jonty
累计撰写
275
篇文章
累计收到
980
条评论
今日撰写
0
篇文章
首页
栏目
闲言碎语
学习
福利
技术百科
WordPress
Typecho
软件资源
iPhone
Android
PC软件
CODE
C
VB
PHP
NAS
青龙
页面
闲言碎语
个人导航
文章归档
友情链接
留言簿
关于
网络电视
云盘
统计
推荐
付费资源
朋友圈集赞
二维码生成
音乐下载
用户登录
登录
搜索到
1
篇与
的结果
2016-09-23
阿里巴巴公司根据截图查到泄露信息的具体员工的技术是什么?
阿里巴巴公司根据截图查到泄露信息的具体员工的技术是什么? 在月饼事件中的新闻中提到。阿里对员工访问的界面做了一定的处理。貌似这不是简单的水印。这种处理是什么,是怎么做到的呢? 作者:fuqiang liu 本文通过一个的实验,简要介绍频域手段添加数字盲水印的方法,并进一步验证其抗攻击性。在上述实验的基础上,总结躲避数字盲水印的方法。(多图预警) 本文分为五个部分,第一部分综述;第二部分频域数字盲水印制作原理介绍;第三部分盲水印攻击性实验;第四部分总结;第五部分附录(源代码)。 ## 一、综述 本文提供的一种实现“阿里通过肉眼无法识别的标识码追踪员工”的技术手段。通过看其他答主的分析,阿里可能还没用到频域加水印的技术。 相对于空域方法,频域加盲水印的方法隐匿性更强,抵抗攻击能力更强。这类算法解水印困难,你不知道水印加在那个频段,而且受到攻击往往会破坏图像原本内容。本文简要科普通过频域手段添加数字盲水印。对于web,可以添加一个背景图片,来追踪截图者。 所谓盲水印,是指人感知不到的水印,包括看不到或听不见(没错,数字盲水印也能够用于音频)。其主要应用于音像作品、数字图书等,目的是,在不破坏原始作品的情况下,实现版权的防护与追踪。 添加数字盲水印的方法简单可分为空域方法和频域方法,这两种方法添加了冗余信息,但在编码和压缩情况不变的情况下,不会使原始图像大小产生变化(原来是10MB添加盲水印之后还是10MB)。 空域是指空间域,我们日常所见的图像就是空域。空域添加数字水印的方法是在空间域直接对图像操作(之所以说的这么绕,是因为不仅仅原图是空域,原图的差分等等也是空域),比如将水印直接叠加在图像上。 我们常说一个音有多高,这个音高是指频率;同样,图像灰度变化强烈的情况,也可以视为图像的频率。频域添加数字水印的方法,是指通过某种变换手段(傅里叶变换,离散余弦变换,小波变换等)将图像变换到频域(小波域),在频域对图像添加水印,再通过逆变换,将图像转换为空间域。相对于空域手段,频域手段隐匿性更强,抗攻击性更高。 所谓对水印的攻击,是指破坏水印,包括涂抹,剪切,放缩,旋转,压缩,加噪,滤波等。数字盲水印不仅仅要敏捷性高(不被人抓到),也要防御性强(抗打)。就像Dota的敏捷英雄往往是脆皮,数字盲水印的隐匿性和鲁棒性是互斥的。(鲁棒性是抗攻击性的学术名字) ## 二、频域制作数字盲水印的方法 信号是有频率的,一个信号可以看做是无数个不同阶的正弦信号的的叠加。 上式为傅里叶变换公式,是指时域信号(对于信号我们说时域,因为是与时间有关的,而图像我们往往说空域,与空间有关),是指频率。想要对傅里叶变换有深入了解的同学,建议看一下《信号与系统》或者《数字信号处理》的教材,里面系统介绍了傅里叶变换、快速傅里叶变换、拉普拉斯变换、z变换等。 简而言之,我们有方法将时域信号转换成为频域,同样,我们也能将二维信号(图像)转换为频域。在上文中提到,图像的频率是指图像灰度变换的强烈情况。关于此方面更系统的知识,参见冈萨雷斯的《图像处理》。 下面以傅里叶变换为例,介绍通过频域给图像添加数字盲水印的方法。注意,因为图像是离散信号,我们实际用的是离散傅里叶变换,在本文采用的都是二维快速傅里叶变换,快速傅里叶变换与离散时间傅里叶变换等价,通过蝶型归并的手段,速度更快。下文中傅里叶变换均为二维快速傅里叶变换。 上图为叠加数字盲水印的基本流程。编码的目的有二,一是对水印加密,二控制水印能量的分布。以下是叠加数字盲水印的实验。 这是原图像,尺寸300*240 (不要问我为什么不用Lena,那是我前女友), &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/b3a4081fc7b9bbb79ffb000ecedc88e0_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 之后进行傅里叶变换,下图变换后的频域图像, &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/8744d653930d09b603ec571422ceb8ea_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 这是我想加的水印,尺寸200*100, &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/63030836c8e16a6347a83069f5c995fc_b.jpg" data-rawwidth="200" data-rawheight="100" class="content_image" width="200"&amp;amp;amp;gt; 这是我编码后的水印,编码方式采用随机序列编码,通过编码,水印分布到随机分布到各个频率,并且对水印进行了加密, &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/9762930aae4390a0ebb87198efa64332_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 将上图与原图的频谱叠加,可见图像的频谱已经发生了巨大的变化, &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/85474adf7decaa08b250be0ded87d7e6_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 之后,将叠加水印的频谱进行傅里叶逆变换,得到叠加数字水印后的图像, &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/eb37e5719b7dbdc7c2f1fee82555a9d3_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 肉眼几乎看不出叠加水印后的图像与原图的差异,这样,数字盲水印已经叠加到图像中去。 实际上,我们是把水印以噪声的形式添加到原图像中。 下图是在空域上的加水印图与原图的残差(调整了对比度,不然残差调小看不见), &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/6bb2786fcadc1a7c340dd9dac6ff4df5_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 可以看出,实际上上述方法是通过频域添加冗余信息(像噪声一样)。这些噪声遍布全图,在空域上并不容易破坏。 最终,均方误差(MSE)为0.0244 信噪比(PSNR)为64.2dB 那么,为什么频谱发生了巨大的变化,而在空域却变化如此小呢?这是因为我们避开了图像的主要频率。下图是原图频谱竖过来的样子,其能量主要集中在低频。 &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/497b039be857a52ebdd060fe59da58ca_b.jpg" data-rawwidth="561" data-rawheight="420" class="origin_image zh-lightbox-thumb" width="561" data-original="https://img.nobb.cc/2022/497b039be857a52ebdd060fe59da58ca_r.jpg"&amp;amp;amp;gt;水印提取是水印叠加的逆过程,水印提取是水印叠加的逆过程, &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/4f09483bfa5e0601aa77ed516bdf46fd_b.jpg" data-rawwidth="1158" data-rawheight="318" class="origin_image zh-lightbox-thumb" width="1158" data-original="https://img.nobb.cc/2022/4f09483bfa5e0601aa77ed516bdf46fd_r.jpg"&amp;amp;amp;gt; 经提取后,我们得到如下水印,问:为什么水印要对称呢?嘿嘿,大家想想看。 &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/ae69d7c600f12d5c236bd0ebfea0a361_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ## 三、攻击性实验 本部分进行攻击性实验,来验证通过频域手段叠加数字盲水印的鲁棒性。 ### 1.进行涂抹攻击,这是攻击后的图片: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/104994386bbf1e9b9cbea3eeb609264c_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 再进行水印提取: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/d269c1532e70d6de7c2060c2e18563e9_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 2.进行剪切攻击,就是网上经常用的截图截取一部分的情况: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/ad05d44a39b5a6af756d1c2aefc7ec1c_b.jpg" data-rawwidth="240" data-rawheight="240" class="content_image" width="240"&amp;amp;amp;gt; 进行循环补全: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/238231eb23a3b6589fec927bae928163_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 提取水印: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/cff34012b4b2005982bbd178a6d37c46_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 3.伸缩攻击(这个实验明码做的,水印能量较高,隐匿性不强): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/37aaa1b83edeafd61f039d7d788da0bf_b.jpg" data-rawwidth="150" data-rawheight="120" class="content_image" width="150"&amp;amp;amp;gt; 提取水印(水印加的不好,混频挺严重的): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/201871f587c91c544b9a6f4abb7b50ee_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 4.旋转攻击(明码): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/5ac9538cd769228a3ee9a1010a70ac66_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 提取水印: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/350b0512cf32ee01f389c0ddee3a1b43_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 5.JPEG压缩后(这个实验我好像是拿明码做的,能量主要加在了高频): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/7294860f10dd05dc07edf292f893f517_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 提取结果: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/f0eedd3f2c5a64dfb12806d056d53afe_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 6.PS 4像素马赛克/均值滤波等,攻击后图像(这是我女朋友吗?丑死了): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/1bdc3e13d618c4bde517d39be1abfe14_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 提取水印后图像: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/78dae620d32d3e0509ff99b848ac88f2_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 7.截屏, 截屏后我手动抠出要测试的图像区域,并且抽样或者插值到原图尺寸: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/32dfb311269481bb13e8da232c3a167d_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 测试结果: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/7883b1811c59826caf96e9a0742c8f2f_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 8. 亮度调节(明码): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/6164c4a16c0d536ae03b849e2f5f7cb0_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 水印提取: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/1e059b20263653d450c496f53a74b371_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 9.色相调节(明码): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/185bc9841a1a4b3bb77857268d9f5c33_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 水印提取: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/932c47bc2fd83f6a48f08e6e10218155_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 10.饱和度调节(明码): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/008d382b9979b3728229639f9535e42b_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 水印: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/ece7657225fb4522d54562e555cf4478_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 11.对比度(明码): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/d8885103e3a556f769344789b4feb654_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 水印: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/655d4e3d3175c75b727ee0746eed1164_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 12.评论区用waifu2x去噪后图片: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/bbe078c282f01ad5daf0c31d01375e47_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 解水印: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/c7f4a130b5668fd9eaacd03dfdb89f9b_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 13.美图秀秀,我对我女票一键美颜,美白,磨皮,加腮红,加唇彩(有一种很羞耻的感觉,捂脸): &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/d6bdb3a5d9bce0c6de409ce699129f54_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 提取水印: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/c7f4a130b5668fd9eaacd03dfdb89f9b_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; ### 14.对于背景纯色的图其实也是无所谓的 &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/a6edbc9a370dde28dc9e2f320a31ab50_b.jpg" data-rawwidth="320" data-rawheight="240" class="content_image" width="320"&amp;amp;amp;gt;能量系数为10时加水印图片:觉得太显噪就把能量系数调低,不过水印的隐秘性和鲁棒性是互斥的能量系数为10时加水印图片:觉得太显噪就把能量系数调低,不过水印的隐秘性和鲁棒性是互斥的 &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/2f8d121e7d8174299c2a8eddc4dca05e_b.jpg" data-rawwidth="320" data-rawheight="240" class="content_image" width="320"&amp;amp;amp;gt; 最终提取出的水印: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/29c89dd9595d0605e0ba70e657a3f358_b.jpg" data-rawwidth="320" data-rawheight="240" class="content_image" width="320"&amp;amp;amp;gt; ### 15.我用将RGB>600的像素设置成为(0,255,0)来模拟PS魔术手, &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/dd39d93e64b2ce44751e9358feb6d957_b.jpg" data-rawwidth="320" data-rawheight="240" class="content_image" width="320"&amp;amp;amp;gt; 提取水印为: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/cfb84d767e7cc6c7f7ffc3b4928c14a1_b.jpg" data-rawwidth="320" data-rawheight="240" class="content_image" width="320"&amp;amp;amp;gt; ### 16.屏摄,好吧,这个实验我做哭了 屏摄图: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/d92a632dde3a1583db4163dcf4d53b0a_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 实验结果: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/982aa30e34745873a6297a58213ebc6e_b.jpg" data-rawwidth="300" data-rawheight="240" class="content_image" width="300"&amp;amp;amp;gt; 我把水印能量系数调整到2000都没有用。 屏摄之后与原图信噪比为4dB左右,我用多抽样滤波的方式试过,滤不掉屏摄引入的噪声。屏摄不仅引入了椒盐噪声,乘性噪声,还有有规律的雪花纹理(摩尔纹)。 ## 四、总结 基于频域的盲水印方法隐藏性强,鲁棒性高,能够抵御大部分攻击。但是,对于盲水印算法,鲁棒性和隐匿性是互斥的。 本文方法针对屏摄不行,我多次实验没有成功,哪位大神可以做一下或者讨论讨论。还有二值化不行,这是我想当然的,觉得肯定不行所以没做实验。其他的我试了试,用给出的方法调整一下能量系数都可以。 我想大家最关心的是什么最安全,不会被追踪。 不涉及图像的都安全,比如拿笔记下来。 涉及图像的屏摄最安全, 截屏十分不安全。 ## =====彩蛋===== &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/e043083a7f564fa9677d9a147ada4851_b.jpg" data-rawwidth="308" data-rawheight="231" class="content_image" width="308"&amp;amp;amp;gt;我在上图明码写入了信息。为了抵抗jpg压缩,我水印能量较高,并且因为没有编码,能量分布不均。图中规律性纹路,就是你懂的。嘿嘿,你懂的,解开看看吧。 我在上图明码写入了信息。为了抵抗jpg压缩,我水印能量较高,并且因为没有编码,能量分布不均。图中规律性纹路,就是你懂的。嘿嘿,你懂的,解开看看吧。 @杨一丁 在答案中给出了上图隐写的内容,(雾)。 ### 答案: 解码思路大概是这样的:先找到原图,然后和原图在频域处理一下,就可以得到下面的**链接了 ****************************** 才怪嘞!师兄可是个守法的知乎青年。送给大家一个励志良言: &amp;amp;amp;lt;img src="https://img.nobb.cc/2022/febd7e4cc7749016533716b4788362be_b.png" data-rawwidth="522" data-rawheight="341" class="origin_image zh-lightbox-thumb" width="522" data-original="https://img.nobb.cc/2022/febd7e4cc7749016533716b4788362be_r.png"&amp;amp;amp;gt; 五、附录%%傅里叶变换加水印源代码 %% 运行环境Matlab2010a clc;clear;close all; alpha = 1; %% read data im = double(imread('gl1.jpg'))/255; mark = double(imread('watermark.jpg'))/255; figure, imshow(im),title('original image'); figure, imshow(mark),title('watermark'); %% encode mark imsize = size(im); %random TH=zeros(imsize(1)*0.5,imsize(2),imsize(3)); TH1 = TH; TH1(1:size(mark,1),1:size(mark,2),:) = mark; M=randperm(0.5*imsize(1)); N=randperm(imsize(2)); save('encode.mat','M','N'); for i=1:imsize(1)*0.5 for j=1:imsize(2) TH(i,j,:)=TH1(M(i),N(j),:); end end % symmetric mark_ = zeros(imsize(1),imsize(2),imsize(3)); mark_(1:imsize(1)*0.5,1:imsize(2),:)=TH; for i=1:imsize(1)*0.5 for j=1:imsize(2) mark_(imsize(1)+1-i,imsize(2)+1-j,:)=TH(i,j,:); end end figure,imshow(mark_),title('encoded watermark'); %imwrite(mark_,'encoded watermark.jpg'); %% add watermark FA=fft2(im); figure,imshow(FA);title('spectrum of original image'); FB=FA+alpha*double(mark_); figure,imshow(FB); title('spectrum of watermarked image'); FAO=ifft2(FB); figure,imshow(FAO); title('watermarked image'); %imwrite(uint8(FAO),'watermarked image.jpg'); RI = FAO-double(im); figure,imshow(uint8(RI)); title('residual'); %imwrite(uint8(RI),'residual.jpg'); xl = 1:imsize(2); yl = 1:imsize(1); [xx,yy] = meshgrid(xl,yl); figure, plot3(xx,yy,FA(:,:,1).^2+FA(:,:,2).^2+FA(:,:,3).^2),title('spectrum of original image'); figure, plot3(xx,yy,FB(:,:,1).^2+FB(:,:,2).^2+FB(:,:,3).^2),title('spectrum of watermarked image'); figure, plot3(xx,yy,FB(:,:,1).^2+FB(:,:,2).^2+FB(:,:,3).^2-FA(:,:,1).^2+FA(:,:,2).^2+FA(:,:,3).^2),title('spectrum of watermark'); %% extract watermark FA2=fft2(FAO); G=(FA2-FA)/alpha; GG=G; for i=1:imsize(1)*0.5 for j=1:imsize(2) GG(M(i),N(j),:)=G(i,j,:); end end for i=1:imsize(1)*0.5 for j=1:imsize(2) GG(imsize(1)+1-i,imsize(2)+1-j,:)=GG(i,j,:); end end figure,imshow(GG);title('extracted watermark'); %imwrite(uint8(GG),'extracted watermark.jpg'); %% MSE and PSNR C=double(im); RC=double(FAO); MSE=0; PSNR=0; for i=1:imsize(1) for j=1:imsize(2) MSE=MSE+(C(i,j)-RC(i,j)).^2; end end MSE=MSE/360.^2; PSNR=20*log10(255/sqrt(MSE)); MSE PSNR %% attack test %% attack by smearing %A = double(imread('gl1.jpg')); %B = double(imread('attacked image.jpg')); attack = 1-double(imread('attack.jpg'))/255; figure,imshow(attack); FAO_ = FAO; for i=1:imsize(1) for j=1:imsize(2) if attack(i,j,1)+attack(i,j,2)+attack(i,j,3)>0.5 FAO_(i,j,:) = attack(i,j,:); end end end figure,imshow(FAO_); %extract watermark FA2=fft2(FAO_); G=(FA2-FA)*2; GG=G; for i=1:imsize(1)*0.5 for j=1:imsize(2) GG(M(i),N(j),:)=G(i,j,:); end end for i=1:imsize(1)*0.5 for j=1:imsize(2) GG(imsize(1)+1-i,imsize(2)+1-j,:)=GG(i,j,:); end end figure,imshow(GG);title('extracted watermark'); %% attack by cutting s2 = 0.8; FAO_ = FAO; FAO_(:,s2*imsize(2)+1:imsize(2),:) = FAO_(:,1:int32((1-s2)*imsize(2)),:); figure,imshow(FAO_); %extract watermark FA2=fft2(FAO_); G=(FA2-FA)*2; GG=G; for i=1:imsize(1)*0.5 for j=1:imsize(2) GG(M(i),N(j),:)=G(i,j,:); end end for i=1:imsize(1)*0.5 for j=1:imsize(2) GG(imsize(1)+1-i,imsize(2)+1-j,:)=GG(i,j,:); end end figure,imshow(GG);title('extracted watermark'); %%小波变换加水印,解水印大家按照加的思路逆过来就好 clc;clear;close all; %% read data im = double(imread('gl1.jpg'))/255; mark = double(imread('watermark.jpg'))/255; figure, imshow(im),title('original image'); figure, imshow(mark),title('watermark'); %% RGB division im=double(im); mark=double(mark); imr=im(:,:,1); markr=mark(:,:,1); img=im(:,:,2); markg=mark(:,:,2); imb=im(:,:,3); markb=mark(:,:,3); %% parameter r=0.04; g = 0.04; b = 0.04; %% wavelet tranform and add watermark % for red [Cwr,Swr]=wavedec2(markr,1,'haar'); [Cr,Sr]=wavedec2(imr,2,'haar'); % add watermark Cr(1:size(Cwr,2)/16)=... Cr(1:size(Cwr,2)/16)+r*Cwr(1:size(Cwr,2)/16); k=0; while k<=size(Cr,2)/size(Cwr,2)-1 Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4:size(Cr,2)/4+... (k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/4+... k*size(Cwr,2)/4:size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+... r*Cwr(1+size(Cwr,2)/4:size(Cwr,2)/2); Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4:size(Cr,2)/2+... (k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/2+... k*size(Cwr,2)/4:size(Cr,2)/2+(k+1)*size(Cwr,2)/4)+... r*Cwr(1+size(Cwr,2)/2:3*size(Cwr,2)/4); Cr(1+3*size(Cwr,2)/4+k*size(Cwr,2)/4:3*size(Cwr,2)/4+... (k+1)*size(Cwr,2)/4)=Cr(1+3*size(Cr,2)/4+... k*size(Cwr,2)/4:3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+... r*Cwr(1+3*size(Cwr,2)/4:size(Cwr,2)); k=k+1; end; Cr(1:size(Cwr,2)/4)=Cr(1:size(Cwr,2)/4)+r*Cwr(1:size(Cwr,2)/4); % for green [Cwg,Swg]=WAVEDEC2(markg,1,'haar'); [Cg,Sg]=WAVEDEC2(img,2,'haar'); Cg(1:size(Cwg,2)/16)=... Cg(1:size(Cwg,2)/16)+g*Cwg(1:size(Cwg,2)/16); k=0; while k<=size(Cg,2)/size(Cwg,2)-1 Cg(1+size(Cg,2)/4+k*size(Cwg,2)/4:size(Cg,2)/4+... (k+1)*size(Cwg,2)/4)=Cg(1+size(Cg,2)/4+... k*size(Cwg,2)/4:size(Cg,2)/4+(k+1)*size(Cwg,2)/4)+... g*Cwg(1+size(Cwg,2)/4:size(Cwg,2)/2); Cg(1+size(Cg,2)/2+k*size(Cwg,2)/4:size(Cg,2)/2+... (k+1)*size(Cwg,2)/4)=Cg(1+size(Cg,2)/2+... k*size(Cwg,2)/4:size(Cg,2)/2+(k+1)*size(Cwg,2)/4)+... g*Cwg(1+size(Cwg,2)/2:3*size(Cwg,2)/4); Cg(1+3*size(Cg,2)/4+k*size(Cwg,2)/4:3*size(Cg,2)/4+... (k+1)*size(Cwg,2)/4)=Cg(1+3*size(Cg,2)/4+... k*size(Cwg,2)/4:3*size(Cg,2)/4+(k+1)*size(Cwg,2)/4)+... g*Cwg(1+3*size(Cwg,2)/4:size(Cwg,2)); k=k+1; end; Cg(1:size(Cwg,2)/4)=Cg(1:size(Cwg,2)/4)+g*Cwg(1:size(Cwg,2)/4); % for blue [Cwb,Swb]=WAVEDEC2(markb,1,'haar'); [Cb,Sb]=WAVEDEC2(imb,2,'haar'); Cb(1:size(Cwb,2)/16)+b*Cwb(1:size(Cwb,2)/16); k=0; while k<=size(Cb,2)/size(Cwb,2)-1 Cb(1+size(Cb,2)/4+k*size(Cwb,2)/4:size(Cb,2)/4+... (k+1)*size(Cwb,2)/4)=Cb(1+size(Cb,2)/4+... k*size(Cwb,2)/4:size(Cb,2)/4+(k+1)*size(Cwb,2)/4)+... g*Cwb(1+size(Cwb,2)/4:size(Cwb,2)/2); Cb(1+size(Cb,2)/2+k*size(Cwb,2)/4:size(Cb,2)/2+... (k+1)*size(Cwb,2)/4)=Cb(1+size(Cb,2)/2+... k*size(Cwb,2)/4:size(Cb,2)/2+(k+1)*size(Cwb,2)/4)+... b*Cwb(1+size(Cwb,2)/2:3*size(Cwb,2)/4); Cb(1+3*size(Cb,2)/4+k*size(Cwb,2)/4:3*size(Cb,2)/4+... (k+1)*size(Cwb,2)/4)=Cb(1+3*size(Cb,2)/4+... k*size(Cwb,2)/4:3*size(Cb,2)/4+(k+1)*size(Cwb,2)/4)+... b*Cwb(1+3*size(Cwb,2)/4:size(Cwb,2)); k=k+1; end; Cb(1:size(Cwb,2)/4)=Cb(1:size(Cwb,2)/4)+b*Cwb(1:size(Cwb,2)/4); %% image reconstruction imr=WAVEREC2(Cr,Sr,'haar'); img=WAVEREC2(Cg,Sg,'haar'); imb=WAVEREC2(Cb,Sb,'haar'); imsize=size(imr); FAO=zeros(imsize(1),imsize(2),3); for i=1:imsize(1); for j=1:imsize(2); FAO(i,j,1)=imr(i,j); FAO(i,j,2)=img(i,j); FAO(i,j,3)=imb(i,j); end end figure, imshow(FAO); title('watermarked image');他人回答:@shotgun其实如果防御做得好,想绕过还真的没那么容易。按照DLP,也就是数据防泄密的思路:1.重要的图片或者文档内加水印,文件里面再加上全息数字水印(这个大家都说得很全面了)然而这就足够了吗?或者说只有这些防护?乃义务!2.所有终端监控敏感操作:另存、截屏、剪贴板、对敏感文档的操作等等,上述行为一律上传到审计服务器上备份待查。3.禁止未授权(未安装终端防护程序)的终端接入内网和业务系统。4.有敏感操作或者跨终端登录的时候通过摄像头拍摄人脸(知道为什么扎克伯格要贴摄像头了吧)5.定期对硬盘进行文件扫描,关键字、相似度、OCR等方法识别出可能是敏感或者涉密的文件,并提取特征,进行标定。6.同样采用散列值、关键字、相似度匹配等方法检查所有网络出口:邮件、聊天、网站、网盘等,对传输内容全部解码进行审计并且记录。7.检查或者关闭所有物理出口,USB、Wi-Fi、蓝牙、音频口(防止通过耳机口盗窃数据)。8.所有文件落地加密(文件加密或者全盘加密),偷硬盘也没用。9.所有电子设备进出办公区域全部审核检查。10.核心机密文档不落地,存放于核心服务器,采用远程终端或者虚拟窗口方式查阅/编辑。别笑,富士康和华为基本上就是这么干的。他人回答:@鹿鳴cx貌似这不是简单的水印。实际上这还真就是最简单的水印而已。“做到”是极简单的事情,至于说能做到什么程度,那是另一回事。一般简单的基于变换域的信息隐藏技术,比如离散余弦变换、小波变换等,足以抵抗常见的压缩、剪切等处理。举个很常见的例子:&lt;img data-rawheight="450" data-rawwidth="210" src="https://img.nobb.cc/2022/2d0bd681997bc386d5a69110a229123e_b.jpg" class="content_image" width="210"&gt;不好意思,手抖发错了。重发一下:不好意思,手抖发错了。重发一下:&lt;img data-rawheight="654" data-rawwidth="568" src="https://img.nobb.cc/2022/aab3ddcd48b28892603b9aa5ed84e6be_b.png" class="origin_image zh-lightbox-thumb" width="568" data-original="https://img.nobb.cc/2022/aab3ddcd48b28892603b9aa5ed84e6be_r.png"&gt;图片出处:《数字隐藏与数字水印》钮心忻主编。图片出处:《数字隐藏与数字水印》钮心忻主编。君不见,小小一幅图,足够老司机飙N次重卡了。
2016年09月23日
128 阅读
0 评论
0 点赞