简单的数字水印加密技术

2023-11-13

最近我一个朋友问谍战情节里是怎样办到将数据隐藏到一般图片里的,正好有一段时间我也研究过这个问题,既然他问了干脆我就写出来和大家也一起分享一下吧,大都是自己琢磨的,如有更加专业的做法欢迎大家讨论啊。

由于时间比较久远,当年研究的代码找了半天也没找到,其实原理很简单,就不重新编了吧,重点说说思路。

其实数字水印加密技术基本原理是很简单的,我们都知道,一张图片是由红绿蓝三个灰度矩阵组成的,每个灰度矩阵(二维数组)又包含很多个灰度值,灰度值范围为0~255,占8位。这些都是数字栅格图的基本常识,如果不太明白的话可以上网查查相关资料。

现在我们说说这些灰度是怎么隐藏我们秘密的。灰度共分为256个级,但事实上,人眼根本就区分不出563435等等这些靠的很近的灰度值,也就是说你在灰度值上面修改一两个值根本察觉不到图片有什么变化。简单的数字水印加密技术就是基于这个原理的。

具体怎么做呢?

第一步:将你需要加密的数据分解为二进制编码(也可以是8进制或10进制,但是2进制效果最好,16进制最好别用,估计明显能够看出图片做过手脚)。

第二步:按顺序将需要加密的二进制数据(0或者1)对应到图片的每个灰度值(如52),然后修改灰度值,使灰度值的最后一位与相应的二进制数据保持一致。比如说,第三位需要加密的二进制编码数据是1,第三个灰度值是00010100,那么修改后的灰度值就是00010101

第三步:根据修改后的灰度值矩阵重新构建图片就好了,保证你看不出来带加密数据的图片和原图片有什么不一样。

加密这就完成了,那么解密呢?自然是按照你写进去的编码方式读出来就好了。

 

下面几个问题:

一、解密的时候如何知道读到结尾了没有?

可以设计一个结尾标识。

二、可不可以不从第一个灰度值开始记录加密数据?

可以,要设计一个密钥,告诉解密程序从哪里开始读取数据。

三、对数据不放心还可以进一步加密吗?

可以,设计复杂点的密钥,告诉解密软件数据读取数据的顺序和规则、异或计算的数据或其他加密方式的解密提示。比如:0010,1010,1011可能表达的意思是:从第3个灰度值开始是有效数据,有效数据里每读一个数据抛弃一个数据,数据解码的异或运算数字是1011。当然,这些密钥也可以是事先约定好的,也可以直接写在图片里,这就看你怎么设计了。

四、对图片有什么要求吗?

图片最好发杂一点,需要大一点,这种加密方式最多也就能加密点阵数量的3倍的数据,还是比较小的,如果需要加密更多数据可以考虑使用10进制,或者采用更加高效的编码方法。

五、除了加密传送数据,还可以干其他的吗?

可以,比如说通过对添加的水印进行复原可以检测你的图片是否被修改过等等。

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

简单的数字水印加密技术 的相关文章

  • 鹤舞云天服务器稳定,《御剑红尘》手游新服“鹤舞云天”即将开启!

    亲爱的少主们 一念入微梦 月下与君酌 桃漫枝满头 缘聚玄天处 伴随着飘渺的莺莺婉歌 让我们一同走进清梦星河的梦境深处 御剑红尘 手游计划于12月19日10 00开启全新一组服务器 鹤舞云天 吹笙玄鹤舞 长望碧云天 届时欢迎各位探险家前来进驻
  • C++复习第二天:类与对象

    1 什么是面向过程 什么是面向对象 C语言是面向过程的 关注的是过程 分析出解题过程的步骤 调用函数来实现 C 是基于面向对象的 关注的是对象 将一件事物划分成不同的对象 通过不同对象之间相互交互完成 2 面向对象的三大特性 面向对象的三大
  • Unity3D开发环境安装(windows系统)

    1 首先先下载软件包 http pan baidu com s 1imYVv 4 2版本 2 下载完后 解压会看到两个文件 运行第二个安装包 3 准备安装 这里直接上图了 这里全选 里面包括运行媒体之类的 这里自己选择安装目录 如果你C盘空
  • 第三章内存管理

    1 内存的基础知识 内存可存放数据 程序执行前需要先放到内存中才能被CPU处理 缓和CPU与硬盘之间的速度矛盾 指令中的地址参数直接给出了变量x的实际存放地址 物理地址 1 绝对装入 绝对装入 在编译时 如果知道程序将放到内存中的哪个位置
  • 5G应用场景300例 附下载地址

    为加快5G在重点产业领域的推广应用 推动我省5G产业发展 我厅会同山东联通 山东移动 山东电信在全国范围内筛选了解决方案 编制了 5G应用场景300例 关注公众号 互联互通社区 回复 5G应用场景300例 获取全部内容 5G移动通信技术基本
  • 运行python脚本时传入参数的几种方式(接收外部参数)

    运行python脚本时传入参数时三种格式对应不同的参数解析方式 分别为sys argv argparse tf app run 前两者是python自带的功能 后者是tensorflow提供的便捷方式 1 sys argv sys模块是很常
  • Q_UNUSED()函数的作用

    Q UNUSED 函数在程序中的作用 就如它所代表的英文一样 unused 即无用的意思 即Q UNUSED 函数在程序中没有实质性的作用 用来避免编译器警告 下面我们来看一组程序 void ColorItem paint QPainter
  • Flutter 环境配置

    Flutter 环境配置 电脑上面安装配置JDK 1 下载安装JDK 下载地址 https www oracle com technetwork java javase downloads jdk8 downloads 2133151 ht
  • 刚拿到esp32-cam想测试该怎么办?看这篇文章就可以了

    无意间对esp32 cam感兴趣 就去某pdd买了一个模块玩玩 组装摄像头的时候不要硬插进去 有个活动卡槽可以扣开 如下图 接下来去arduino官网或者中文社区下载 arduino官网 https www arduino cc en so
  • LeetCode题目笔记——206. 反转链表

    文章目录 题目描述 题目难度 简单 方法一 顺序遍历 C 代码 Python代码 方法二 递归 代码 题目描述 题目难度 简单 方法一 顺序遍历 我们只需顺序遍历一次列表 在原地将它们的指向依次逆转 需要注意的是 当链表本身为空的时候我们直
  • python数据分析-超市客流量高峰期分析--调用matplotlib折线图

    python数据分析 超市客流量高峰期分析 调用matplotlib折线图 数据处理 有一份超市订单csv格式数据源导入后如下 导入需要使用的模块 import pandas as pd import matplotlib pyplot a
  • 6个 Python 办公黑科技,工作效率提升100倍!(附代码)

    下班晚 加班久感觉已经成为现代打工人的通病 每天将大部分时间浪费在一些机械 重复的工作上 如何提升你自己的工作效率才是关键 今天给大家分享6个 Python 办公小技巧 让你的工作效率倍增 欢迎大家学习收藏 喜欢点赞支持 废话不说 让我们开
  • 微信小程序遇到的坑系列---小程序上传图片线上失败

    微信小程序中 上传图片的代码如下 实现功能 1 上传图片到七牛云 2 上传成功后 对于返回的路径展示到页面 3 将返回的路径发送给后端 对于第一个需求 1 上传图片到七牛云 我们需要在七牛云上有一个账号去存自己的图片 于是不能忽略的一步 就
  • 【业务功能篇49】Springboot+EasyPoi 实现Excel 带图片列的导入导出

    SpringBoot整合EasyPoi实现Excel的导入和导出 带图片 51CTO博客 springboot easypoi导出excel

随机推荐

  • JDBC Utils 详解(通俗易懂)

    目录 一 前言 二 JDBCUtils说明 1 背景及起因 2 示意图 3 JDBCUtils类的定义 三 JDBCUtils应用 1 DML的应用 2 DQL的应用 四 总结 一 前言 第三节内容 up主要和大家分享一下JDBC Util
  • 输入权重和偏置的范围问题?

    对于张的单输入单输出的非线性函数 用黄的程序 隐层神经元的个数并没有太大的影响 而输入权重和偏置的范围有很大的影响 隐层神经元数50 InputWeight rand NumberofHiddenNeurons NumberofInputN
  • 龙芯+RT-Thread+LVGL实战笔记(1)——从移植开始

    过去的大半年时间 一直带着学生备战全国职业院校技能大赛 嵌入式系统应用开发 赛项 由于是首次参加该赛项 很多东西都是从0到1的摸索和积累 最后的成绩自然也不甚理想 作为指导教师 备赛期间除了给予学生必要的指导 自己也花了不少精力研究了大赛指
  • 9.7C++作业

    include
  • redis安装过程报错解决方案

    问题一 出现如下错误 cd src make all make 1 Entering directory xx xx redis x x x src CC adlist o bin sh cc command not found make
  • pycharm 安装 markdown 的三种方法! 绝对管用!!!

    Markdown是一种可以使用普通文本编辑器编写的标记语言 通过简单的标记语法 它可以使普通文本内容具有一定的格式 本人使用的是专业版pycharm 自己破解的 不知道正版的有没有安装不上markdown的情况 就个人所遇到的问题解决方案如
  • Spark读取ES报错EsHadoopInvalidRequest The number of slices [1632] is too large

    Spark读取ES报错EsHadoopInvalidRequest The number of slices 1632 is too large 1 背景 最近需要将ES指定索引中的数据使用Spark读取 进行简单处理后写入HBase 使用
  • avalon框架系列-指令(一)

    avalon的指令是一个非常重要的东西 它用来引入一些新的HTML语法 使元素拥有特定的行为 指令一共拥有3种形式 插值表达式 自定义标签 绑定属性 先说说两个比较少的形式 插值表达式和自定义标签 1 插值表达式 跟Vue框架的一样 都是一
  • MATLAB线性回归

    问题陈述 目标是通过使用线性回归技术进行统计推断预测 使用来自论文 1977 Narula and Wellington Prediction Linear Regression and the Minimum Sum of Relativ
  • 【深度学习】Inception的前世今生(四)--Inception V4,Inception-ResNet

    Inception的系列文章 1 Inception v1 Going deeper with convolutions https arxiv org abs 1409 4842 2 Inception v2 Batch Normaliz
  • 通过Docker创建CentOS容器

    前言 先安装Docker 使用文内的脚本可以快速创建CentOS 7 8虚拟系统集群 并通过SSH Secure Shell 远程工具连接 创建桥接网络 方便容器间通信 指令格式为docker network create lt 网络名称
  • 动态原型模式

    动态原型模式 通过开关 动态添加函数的方法
  • 史上最全!大数据开源框架技术扫盲

    一 目录 系统平台 Hadoop CDH HDP 监控管理 CM Hue Ambari Dr Elephant Ganglia Zabbix Eagle 文件系统 HDFS GPFS Ceph GlusterFS Swift BeeGFS
  • 图像构成与信号处理之二——信号滤波

    一 信号滤波与图像滤波 信号滤波和图像滤波都是信号处理的重要任务 它们在不同领域中有广泛的应用 一 信号滤波 信号滤波是对信号进行处理的过程 通过去除或抑制不需要的频率成分 以实现信号的平滑或去噪 信号滤波的目标是改变信号的频谱分布 以达到
  • WiFi-ESP8266入门开发(十三)-使用SPI

    注 对于ESP8266开源技术感兴趣的可以加群 我们一起探索交流学习 群号 579932824 群名 ESP8266开源技术交流群 介绍 串行外设接口 SPI 是摩托罗拉公司最初启动的总线接口连接协议 SPI接口使用四根线进行通信 因此也被
  • 【JS实用技巧篇】01-函数防抖

    JavaScript专栏 js实用技巧篇 该专栏博主会持续更新 目的是给大家分享一些非常实用的技巧 同时巩固自己的基础 共同进步 欢迎大家在评论区留言交流技术以及学习方法 心得方面的问题 你的一键三连是对我的最大支持 祝大家国庆快乐 文章目
  • 利用python进行数据分析之数据清洗与准备--小白笔记

    数据清洗和准备 处理缺失数据 import pandas as pd import numpy as np string data pd Series aardvark artichoke np nan avocado string dat
  • OpenStack部署之前需要安装哪些必备组件

    二 安全 下面的表格给出了需要密码的服务列表以及它们在指南中关联关系 密码 密码名称 描述 数据库密码 不能使用变量 数据库的root密码 ADMIN PASS admin 用户密码 CEILOMETER DBPASS Telemetry
  • three.js 创建文字的几种方法

    three js 创建文字的几种方法 1 DOM CSS 传统网页html实现 2 将文字绘制到画布中 并将其用作Texture 纹理 将文字保存为图片格式 再将其当作一张蒙皮材质 贴到某个物体上 3 在你所喜欢的3D软件里创建模型 并导出
  • 简单的数字水印加密技术

    最近我一个朋友问谍战情节里是怎样办到将数据隐藏到一般图片里的 正好有一段时间我也研究过这个问题 既然他问了干脆我就写出来和大家也一起分享一下吧 大都是自己琢磨的 如有更加专业的做法欢迎大家讨论啊 由于时间比较久远 当年研究的代码找了半天也没