简单/基本的隐写算法和方法

2024-03-26

最基本和最简单的是什么隐写算法和方法?

我的意思是应用于图像的隐写术。

将数据隐藏到图像的简单程序如何工作?主要使用了哪些技术?程序如何在没有源图像的情况下识别图像中的加密消息?


基本且最简单的隐写算法和方法是什么?我的意思是应用于图像的隐写术。

我很久以前就为此编写了一个库,所以我可以描述这个过程。

基本上,如果您有一种文件格式,可以说是 24 位 BMP 格式。首先,您需要一种将像素读取和写入该文件格式的方法。一旦您了解了文件格式是什么,您就可以使用库或编写自己的库。

图像可以被视为一系列像素。考虑 4x4 像素图像:

x x x x
x x x x
x x x x
x x x x

将这些像素编号为 1 到 16:

01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16

上面编号的每个像素都有一个红色分量、一个绿色分量和一个蓝色分量。这些组件中的每一个都是 1 字节,因此每个组件都可以被视为 0 到 255 之间的值。(24 位 = 红色 8 位,绿色 8 位,蓝色 8 位)。所以上面的每个数字都有 3 组从 0 到 255 的值。

因此,在上面的 4x4 图像示例中,图像中总共有 16pixels*3color_components = 48 字节的数据。通常,您要做的就是仅使用每个颜色分量的最低有效位来对图像进行编码。在这种情况下,您将有 48 位可用数据 = 6 个字节可供您编码您想要的任何 6 字节消息。

为了使这更容易,我们只看一下将简单的 3 位消息编码为单个像素。假设每个颜色分量仅使用 1 位。 假设我们要对 3 位消息进行编码:111

这是值的示例pixel 1上面是在对数据进行编码之前:

电话:10101011
电话:11111010
乙:00011010

您所做的只是更改新数据的最低有效位:

电话:10101011
电话:11111011
乙:00011011

像素在人眼看来是一样的,但现在您使用最低有效位来表示您想要编码的数据。

如果您想将 3 位以上的数据编码为单个像素,您也可以这样做。发生的情况是,您将编码的不仅仅是最低有效位,您可以使用至少 2 个有效位,或至少 3 个等。您使用的位越多,您将开始注意到画面质量。不过,您最多可以使用 7 位,并且您的图像看起来仍然可以识别。

通常,您想要编码的数据会多于 3 位。您想要编码的数据越多,您就必须拥有更多的像素,或者每个像素使用更多的位数来编码数据。假设您想要编码 9 位数据,如果您只使用最低有效位,那么您需要 3 个像素来编码该信息。如果您只想使用 1 个像素,则可以通过使用每个颜色分量的 3 个最低有效位来编码该数据来实现。

要完成此类工作,您可能需要创建一些函数来轻松处理数据位,从而抽象化不断处理按位运算符的复杂性。

对于不同的文件格式,该技术会有所不同,但概念是相同的。隐写术也可以指隐藏数据,例如隐藏在 GIF 扩展块中。通常,您可以通过改变图像的像素来隐藏它,或者在某些文件格式中通过颜色查找表来隐藏它。

有些图像在标题中具有颜色查找表,然后像素是这些颜色查找表的索引。您可以做的是重新排序颜色查找表,使最相似的颜色靠近在一起,然后您可以将数据编码到颜色查找表本身和像素的索引中。因为即使索引稍微改变也没关系,因为查找表是根据相似性排序的。

不过,您确实需要了解文件格式才能完成此类工作。或者至少使用可以为您操作文件格式和文件数据的库。如果您确实对这个主题感兴趣,我建议您从 BMP 等简单的文件格式开始并学习它。您始终可以在以下网站上找到文件格式规范www.wotsit.org http://www.wotsit.org.

程序如何在没有源图像的情况下识别图像中的加密消息?

你是对的。解码信息的程序不需要源图像。 它的工作原理是,它只是执行相反的操作,程序需要知道您使用了多少位数据并使用相同的数据进行解码。它将简单地迭代每个像素并将这些位组合成字节并将这些字节写入文件。

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

简单/基本的隐写算法和方法 的相关文章

  • 在 Java 中实现排列算法的技巧

    作为学校项目的一部分 我需要编写一个函数 该函数将接受整数 N 并返回数组 0 1 N 1 的每个排列的二维数组 该声明看起来像 public static int permutations int N 该算法描述于http www usn
  • 使用FFT算法计算

    给定在平面上的点 1 0 2 0 n 0 上发现的一组 n 个粒子电荷载流子 在 i 0 点发现的粒子电荷记为 Qi 作用在粒子上的力由以下公式给出 C is a Coulomb s constant 给出一个算法来计算 Fi 对于总复杂度
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 如何求解:T(n) = T(n - 1) + n

    我已经解决了以下问题 T n T n 1 n O n 2 现在 当我解决这个问题时 我发现界限非常松散 我是否做错了什么 或者只是这样 您还需要一个递归关系的基本情况 T 1 c T n T n 1 n 为了解决这个问题 您可以首先猜测一个
  • 线性代数如何在算法中使用?

    我的几个同行都提到 学习算法时 线性代数 非常重要 我研究了各种算法并学习了一些线性代数课程 但我没有看到其中的联系 那么线性代数如何应用在算法中呢 例如 图的连接矩阵可以带来哪些有趣的事情 三个具体例子 线性代数是现代 3D 图形的基础
  • 未使用的功能会产生什么后果

    我想知道在代码中使用未使用的函数会产生什么 如果有什么后果 如果您查找并删除所有未使用的函数和变量 性能是否会有明显的改进 或者删除未使用的函数和变量只是一个好习惯 未使用的功能不会损害性能 他们让维护代码的人的工作变得更加困难 现代 ID
  • 使用 SSL 的 Xamarin.Forms Image.Source

    我正在使用一个在线商店来存储通过我们的应用程序上传的用户图像 并受 SSL 保护 上传工作一切顺利 因为我使用的是带有附加证书的 WebClient 但是当我尝试使用 Xamarin Forms Image 组件时 例如将源设置为 http
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 了解客户端文件的对象 URL 以及如何释放内存

    我在用createObjectURL获取本地图像文件的引用 URL 当我完成文件 图像后 我打电话revokeObjectURL释放该内存 一切对我来说都很好 但我只是想确保我释放了我能释放的所有内存 我检查后出现了我的担忧chrome b
  • 在python中将二维数组转换为彩色图像

    我有这样的二维整数列表 list1 1 30 50 21 45 9 97 321 100 接下来我将把它转换为 numpy 数组 myarr np asarray list1 接下来我将使用 PIL 将其转换为图像 如下所示 img Ima
  • 将 System.Drawing.Image 转换为 System.Windows.Media.ImageSource 但没有结果

    我想在我的 WPF 应用程序中将 Image 转换为 ImageSource 我使用正常工作的 Code128 库 已在 WinForms 应用程序中检查 下面的函数返回具有适当大小的 ImageSource 但没有任何内容可见 priva
  • 无法通过电子应用程序在discordjs上发送附加到消息的图像

    我正在尝试为我使用discordjs 编写的discord 机器人构建图形界面 但是 我在发送图像时遇到了问题 这是我的代码中负责向用户发送消息的部分 utilsateur createDM then channeltemp gt let
  • 解释一下从 N 个给定集合中的每一个中给出第 K 个最大数字的示例?

    今天我尝试解决一个Facebook 编程挑战赛 https facebook interviewstreet com recruit challenges 我遇到的挑战是 酒吧问题 可以找到here https github com alo
  • 如何求小于给定数的最大2次方

    我需要找到小于给定数字的最大 2 次幂 我陷入困境 找不到任何解决方案 Code public class MathPow public int largestPowerOf2 int n int res 2 while res lt n
  • C# 代码上的 ImageURL 不显示图像

    我在 aspx 页面上有图像
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 类是否应该有静态和非静态成员

    我试图找出一个类何时适合同时具有静态和非静态函数 又名 obj new ClassA obj gt doOOPStuff something ClassA doStaticStuff Note This example is done in
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想

随机推荐

  • 获取对象中调用者类的名称的最佳方法是什么?

    我可以使用这个来完成这个工作 scala gt object LOGGER def warning msg String implicit className String className defined object LOGGER s
  • 如何使用 ColdFusion 防止 SQL 注入

    ColdFusion 中如何防止 SQL 注入 我对这种语言 框架很陌生 这是我的示例查询
  • addCleanup与tearDown

    最近 内德 巴切尔德 Ned Batchelder 他在 PyCon 2016 上的演讲 http nedbatchelder com text machete html noted 如果您正在使用unittest编写你的测试 一定要使用a
  • Docker 镜像存储在主机的哪里?

    我设法在目录下找到容器 var lib docker containers 但我找不到图像 下有哪些目录和文件 var lib docker 的内容 var lib docker目录因情况而异Docker 用于存储的驱动程序 https g
  • 104、“连接由对等方重置”套接字错误,或关闭套接字何时会导致 RST 而不是 FIN?

    我们正在并行开发 Python Web 服务和客户端网站 当我们从客户端向服务发出 HTTP 请求时 一次调用会在 socket py 的 read 中持续引发一个 socket error 104 Connection reset by
  • 地图样式更改时 Google 地图会更改图标标记

    我正在做一个网络动态项目 在我的 html jsp 页面主体中使用 Google 地图 我创建了一个函数 通过 lat lng map 创建一个标记 并在标记的参数中使用特殊的 image png 作为图标 在我的地图中 我制作了两种不同的
  • Jquery Flot“plothover”事件不起作用

    我有一个似乎无法追踪的问题 我正在使用 Flot 绘制一些数据图表 超级简单 我想添加您在这里看到的悬停效果 浮点数示例 http people iola dk olau flot examples interacting html 不幸的
  • 如何合并 Google 字体导入

    我正在使用带有 Divi 主题的 WordPress 有这样的代码 function et divi fonts url fonts url Translators If there are characters in your langu
  • 为什么调用 setenv("OS_ACTIVITY_DT_MODE", "disable", 1) 不会影响日志记录?

    可以通过设置在 Swift 中隐藏由第 3 方库生成的过于详细的日志OS ACTIVITY MODE环境变量为disable在您的跑步计划中 如下图所示 这让所有人都沉默NSLog您的应用程序的输出 我只想对某些呼叫禁用它 我尝试像这样设置
  • 确定响应者链是否将处理操作

    响应者链很酷 http www cocoanetics com 2012 09 the amazing responder chain 特别是 能够将自定义操作发送给第一响应者 这些操作将冒泡给其他可能感兴趣的人 UIApplication
  • 如何在向上/向下滚动时隐藏/显示视图?

    如何在向上 向下滚动 android 时隐藏 显示视图Foodpanda app 我想隐藏 显示视图 线性或相对布局 ScrollView就像上面的 gif 一样向上 向下 但我的应用程序我不使用 Recyclerview 或列表视图 只是
  • graphviz dot:如何将箭头从节点插入到箭头中心

    我尝试使用 graphviz 包中的 dot 创建用于 MPLUS 分析的图表 有人有使用点可视化结构方程模型 潜在类混合模型的经验吗 特别是有一个功能我不知道如何做得漂亮 我需要从节点到另一个箭头中心的箭头 例如 C V A gt B 我
  • 尝试在 Preg_Match 中查找正斜杠

    我已经搜索了几个小时试图找到解决方案 我正在尝试确定 REQUEST URI 是否合法 并从那里对其进行分解 samplerequesturi variable 12345678910 要确定它是否合法 第一部分variable仅是字母并且
  • 使用单个字符或仅一个字符串进行 boost split

    我希望将字符串拆分为单个字符或字符串 我想用boost split因为 boost string 是我们基本字符串处理的标准 我不想混合几种技术 在单个字符的情况下我可以做split vec str is any of 但我想知道是否有办法
  • boost 的另一个“ld:未找到架构 x86_64 的符号”问题,这次是 mgiza

    我很抱歉问了这样一个常见的问题 我找不到任何可行的或足够清晰的解决方案供我实施 我只是想安装mgiza https github com moses smt mgiza 这是安装文件 cmake make make install If y
  • 监听队列(事件驱动,无轮询)服务总线/存储队列

    我试图弄清楚如何侦听队列上的事件 尤其是入队事件 假设我有一个控制台应用程序和一个服务总线队列 主题 如何连接到队列并等待新消息 我试图在没有While true 和不断的轮询 我试图以一种相当监听的方式来做更多的事情 比如保持连接到队列的
  • Grails 全局约束

    在 1 2 版本中 Grails 引入了全局约束 我尝试将以下内容添加到 Config groovy grails gorm default constraints notBlank nullable false blank false 然
  • NHibernate ThenFetchMany 正在检索重复的子项

    我有一个父对象 其子集合包含一个元素 子集合包含一个包含 3 个元素的 孙子 集合 我使用 NHibernate 从数据库加载父对象 如下所示 Parent parentObject session Query
  • Start-Process 与 Start-Sleep 不能很好地配合

    我的目标是运行多个进程并保存它们ProcessName and Id供以后使用 这是我的代码 System Collections ArrayList startedProcesses processStatus Start Process
  • 简单/基本的隐写算法和方法

    最基本和最简单的是什么隐写算法和方法 我的意思是应用于图像的隐写术 将数据隐藏到图像的简单程序如何工作 主要使用了哪些技术 程序如何在没有源图像的情况下识别图像中的加密消息 基本且最简单的隐写算法和方法是什么 我的意思是应用于图像的隐写术