数字水印技术

2023-10-27

数字水印技术涉及多个学科知识,其中主要包括图像存储处理原理,密码学。

数字图像在计算机里的储存,从结构上讲,分为位图和矢量图。在位图中,图像由许多的屏幕小点组成,这些小点对应显存中的“位”,“位”决定了像素的图形属性,如像素的颜色、灰度、明暗对比度等。当一个像素所占的位数多时,它所能表现的颜色就更多、更丰富,图像的色彩就更艳丽,分辨率就更高。

密码学是研究编制密码和破译密码的技术科学。它包括密码编码学和密码分析学。数字水印中经常会用到一些经典的算法,最著名也是最成熟的公钥密码算法,基础是数论的互素数、指数模和模逆元计算。

粗略来看,数字水印系统包含嵌入器和检测器两大部分。嵌入器至少具有两个输入量:一个是原始信息,它通过适当变换后作为待嵌入水印信号;另一个就是要在其中嵌入水印的载体作品。水印嵌入器输出结果为含水印的载体作品,通常用于传输和转录。之后这件作品或另一件未经过这个嵌入器的作品可以作为水印检测器的输入量。

 公钥密码算法RSA

这种算法出现于1978 年,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。RSA 的安全性依赖于大数分解。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。

为了计算两个密钥,给定两个大素数,p和q,并计算。

计算: n=p*q、 r=(p-1)*(q-1)。然后随机选择加密密钥e,要求e和r互质,即互素数。再然后,利用欧几里得(Euclid)扩展算法计算解密密钥d,它满足e*d=1(modr)。其中,e即为公钥,d即为私钥。e和n是公开的,p和q在加解密过程中不再需要,但绝不能泄露,应该丢弃。给定加密信息(明文) m (二进制表示)时,首先把m分成等长数据块m1,m2,…,mi,块长s, 其中s应小于n的位数,对应的加密密文是:ci =mi^e(modn)。得到相应的密文块,加密后的密文m由相同长度的密文块ci组成。解密时作如下计算:mi=ci^d(modn)。

破译者要解密,就要根据已知的e和n,计算d。而要计算d,应如道1,因而必须知道p和q。但是,如果n是一个60位的大整数,如何能在有生之年将它分解为两个索数因子呢,据研究,目前最快的计算机也无法做到。这就是RSA的安全性所依赖的。

目前,RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大-一些, 因应就具体适用情况而定。

数字图像置乱技术

数字图像置乱即是一种加密方法,合法使用者可以自由控制算法的选择,参数的选择以及使用随机数技术,达到非法使用者无法破译图像内容的目的。对于数字化的图像,置乱过程不仅可以在数字图像的空域(色彩空间、位置空间)上进行,还可以在数字图像的频域上进行。数字图像置乱即是对数字图像的一种加密方法,它使得合法使用者可以自由控制算法的选择、参数的选择以及使用随机数技术,这就给攻击者带来非法破译的难度,主要表现在统计分析各种可能的组合的巨大计算量。

数字图像的置乱变换就是一种可逆变换,通过对数字图像的位置或灰度级等做变换,来扰乱图像,以达到在一定程度上迷感第三者的目的。如果不知道所使用的置乱变换算法,很难恢复出原始图像。

size=512;N=32;K=8; D=zeros(size);E=0.01;%原图像512*512,8位灰度图像,水印嵌入个数:32

I=imread('C:\1.bmp');%原始图像路径

subplot(2,2,1);%函数用于绘制多个图形,两行两列,放到第一个格的位置

imshow(I);%显示图像,i=1时是白色,i=0时黑色

title('原始图像');

I=double(I)/512;

%读入水印

J=imread('C:\40.bmp'); %水印图像路径

subplot(2,2,2);%放到第二个格

imshow(J); %显示图像

title('水印图像');

%对水印缩放

J=double(imresize(J,[64,64])%将水印图片缩放为64*64像素

subplot(2,2,3);%放到第三个格

imshow(J); %显示图像

title('缩放水印图像');

%嵌入水印

for p=1:size/K %p从1到512循环

 for q=1:size/K %q从1到512循环

x=(p-1)*K+1; y=(q-1)*K+1;

    I_dct=I(x:x+K-1,y:y+K-1);

I_dct1=dct2(I_dct);%对每个块进行二维离散余弦变换取相应元素保存到块中

if J(p,q)==0    alfa=-1;

else alfa=1;%向坐标中的对象添加透明度

end

I_dct2=I_dct1+alfa*E;

I_dct=idct2(I_dct2);

D(x:x+K-1,y:y+K-1)=I_dct;

  end

 end

subplot(1,3,3);

imshow(D,[]);

title('含水印的图象');

%%%%%%对加入水印的图像进行低通滤波攻击

hh=fspecial('gaussian',3,0.2);

%hh=fspecial('gaussian',3,0.4);%创建预定义的滤波算子,高斯低通滤波器,模板尺寸3*3,标准差0.4(像素)

QQ=filter2(hh,D);

% 提取水印

for  p=1:size/K  %p从1到512循环

 for  q=1:size/K %q从1到512循环

     x=(p-1)*K+1;

     y=(q-1)*K+1;

     I1=I(x:x+K-1,y:y+K-1);

     I2=QQ(x:x+K-1,y:y+K-1);

I_dct1=dct2(I1);

I_dct2=dct2(I2); %对其本身进行反二维离散余弦变换

  if  I_dct2>I_dct1    W(p,q)=1;

  else    W(p,q)=0;

end     

end

  end

figure,subplot(1,2,1);imshow(R,[]);title('低通滤波攻击');

subplot(1,2,2);imshow(W,[]);title('图像中提取的水印')

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字水印技术 的相关文章

  • nodejs npm 安装报错 无法安装 behind a proxy

    npm ERR Error connect ECONNREFUSED npm ERR at errnoException net js 878 11 npm ERR at Object afterConnect as oncomplete
  • Where-are-they-looking-PyTorch 代码Error: Bool value of Tensor with more than one value is ambiguous

    在Where are they looking PyTorch中的utils py中有一个判断 if temp lt best best temp 报出 Error Bool value of Tensor with more than o
  • Puppet

    1 Puppet简介 Puppet使用一种描述性语言来定义配置项 配置项中被称为 资源 描述性语言可以声明用户的配置状态 比如声明一个软件包应该被安装或一个服务应该被启动等 Puppet可以运行在一台服务器端 每个客户端通过SSL证书连接到
  • 机器学习在工业应用中的新思考

    人工智能在学术界默默发展了很多很多年 从最早的神经网络 到10年前风靡的SVM bagging and boosting 如今的深度学习 日新月异 各领风骚数几年 工业界的发展从最早应用于纯粹的互联网企业 近几年开始应用到更多更广泛的场景
  • Win32环境下两种用于C++的线程同步类

    线程同步是多线程程序设计的核心内容 它的目的是正确处理多线程并发时的各种问题 例如线程的等待 多个线程访问同一数据时的互斥 防死锁等 Win32提供多种内核对象和手段用于线程同步 如互斥量 信号量 事件 临界区等 所不同的是 互斥量 信号量
  • RPC流程一 - proto编写

    参考 https github com goyas goya rpc tree master src 对RPC中的Server端和Client端流程进行整理 代码目录 CMakeLists txt config cmake sample e
  • 手把手教你用代码实现 SSO 单点登录

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 每天 14 00 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框
  • SSH连接慢的问题

    维护linux经常需要使用ssh进行连接 但是有时会很郁闷的发现ssh连接部分机器的时候特别的慢 之前写过一篇文章
  • 【数字IC精品文章收录】近500篇文章

    数字IC全站文章索引demo版 建议收藏慢慢看 一 项目说明 1 1 索引目的 1 2 收录原则 1 3 投稿方式 1 4 版本迭代 二 数字IC学习路线 三 通用技能篇 3 1 数字电路 3 2 硬件描述语言 Verilog 3 3 li

随机推荐

  • React常见面试题

    React常见面试题 1 说说你对react的理解 有哪些特性 2 说说Real DOM和Virtual DOM的区别 优缺点 3 说说React生命周期有哪些不同的阶段 每个阶段对应的方法 4 说说React中setState执行机制 5
  • 【应用笔记】Sub-1G系列产品CW32W031单片机CAD应用参考

    一 功能介绍 CW32W031 的射频部分支持 CAD 中断 从 Deepsleep 进入 STB3 开启 CAD 功能并进入 RX 模式后 CW32W031 会检测信道中是否会有 ChirpIOT 信号 如果存在将 CAD IRQ 置高
  • 袁红岗的程序员修炼之道

    袁红岗的程序员修炼之道 转载引言 袁红岗1994年加盟金蝶 1996年在整个行业还处在DOS时代时最早成功开发出基于Windows平台的金蝶财务软件 开创了依靠技术创新推动企业快速发展的典范 1998年成功开发出基于三层结构组件技术的金蝶K
  • 解决Jenkins报告在浏览器无法显示问题

    在使用jenkins定时启动并收集测试报告的过程中 发现在jenkins上配置的HTML Report打开之后样式不对 页面一片空白 打开开发者模式 发现页面有很多脚本报错 提示有很多资源文件被禁止加载了 百度之后 发现这个是jenkins
  • 【JavaScript】花点时间了解执行上下文

    引言 当我们在浏览器中运行JavaScript代码时 浏览器会先创建一个全局执行上下文 Global Execution Context 然后逐行解析和执行代码 执行上下文是JavaScript中非常重要的概念 它决定了代码的执行顺序和作用
  • Echarts图例legend选中select状态动态更新(踩坑)

    今天计划实现一个小功能 但是却在细节上浪费了大量的时间 特此记录 想要实现的功能是这样的 如下一个ECharts图 后台会一次性接收85条曲线的数据 但在初始化的时候只显示前7条曲线 官方文档 给出了 legend selected 这个属
  • U++ 截屏并拿到所有的截屏资源

    void APluginUseActor spotScreen TArray
  • Qt5下Qxlsx模块安装及使用

    文章目录 1 未安装Qxlsx的程序效果 2 安装Perl 编译Qxlsx源码用 2 1 下载 ActivePerl 5 28 2 2 安装 ActivePerl 5 28 3 下载并编译Qxlsx源码 3 1 下载Qxlsx源码 3 2
  • 树结构(有id和pid字段)数组,生成多层嵌套的json对象

    传入的数组有id和父节点pid字段 通过它们的关联构造成一棵或多棵树结构 param nodes 集合 param treeRootId 根节点的id function createTreeData nodes treeRootId var
  • 【模拟电路】电极驱动H桥

    H桥式驱动电路 是因为它的形状酷似字母H 如图 当Q1和Q4导通时 电机正转 当Q2和Q3导通时 电机反转 任何时候 H桥同一侧的晶体管不能同时导通 否则就会造成电源和地之间短路 电机正转 电机反转 一个双电机驱动电路 H桥 设计思路 使用
  • 深度学习图片数据集分析手段--个人经验小结

    当拿到一批图片数据集的时候 我应该做哪些分析 这里是我自己从业过程中的一些分析手段 从哪里学习的已经不可考 如果有其他的大家觉得有用的分析 可以和我分享一下 避免我自己闭门造车 这里根据已知的信息量分类两种情况 1 只有图片数据 没有标注数
  • Airsim探索01

    Airsim github地址 https github com microsoft AirSim git 官方文档 https microsoft github io AirSim use precompiled
  • linux 中常用的压缩和解压缩命令详解(tar zip)

    文章目录 一 tar命令 1 压缩 2 解压 二 zip命令 1 压缩 2 解压 三 文件加密压缩和密码解压 1 tar命令 1 1 加密压缩 1 2 密码解压 2 zip命令 2 1 加密压缩 2 2 密码解压 在工作中 涉及到文件传输
  • How To get the usbdisk's drive letter properly

    Introduction We know USB disk should be a removable disk just like floppy disk and be used more and more widely now Beca
  • Linux下安装cppunit、gtest单元测试工具

    cppunit下载地址 https www freedesktop org wiki Software cppunit 在linux终端安装 git clone git anongit freedesktop org git libreof
  • UE4引擎插件制作遇到的问题(一)

    大家好 我叫人宅 加载自己做的引擎插件报错 PrimaryGameModuleCouldntBeLoaded The game module 0 could not be loaded There may be an operating s
  • 第二篇web前端面试自我介绍(刚毕业的菜鸟)

    各位面试官 大家好 我叫汤慧来自湖南益阳专业是电子商务web前端方向我今天应聘的职位是web前端开发 在校期间我主修的课程是HTML CSS JavaScript及JQuery 在课余我喜欢通过逛论坛博客github来了解一些前端的前沿的开
  • 为什么要进行单元测试?

    进行单元测试有许多不同的方法 一些主要目的是 验证功能 单元测试确保代码做正确的事情并且不做任何不应该做的事情 大多数错误发生在这里 防止代码回归 当我们发现错误时 添加单元测试来检查场景可以防止代码更改在将来重新引入错误 记录代码 通过正
  • STM32-定时器详解

    前言 定时器作为微控制器不可缺少的外设 在STM32中也是如此 相信不少初学者学到定时器的时候对STM32的学习热情就大打折扣甚至想要放弃了 因为这一部分知识确实比较复杂 但是 如果你在之前对GPIO 串口通信 外部中断的学习中把这些外设掌
  • 数字水印技术

    数字水印技术涉及多个学科知识 其中主要包括图像存储处理原理 密码学 数字图像在计算机里的储存 从结构上讲 分为位图和矢量图 在位图中 图像由许多的屏幕小点组成 这些小点对应显存中的 位 位 决定了像素的图形属性 如像素的颜色 灰度 明暗对比