
jdvrif — 已更新!
JPG 图像隐写工具
jdvrif
jdvrif 是一款快速、易用的隐写术命令行工具,可通过 JPG 图像隐藏和提取任何文件类型。
同时还有一个 Web 版本,您可以立即使用,作为下载和编译 CLI 源代码的便捷替代方案。Web 文件上传限制为 20MB。
对于对该语言感兴趣的用户,还有一个实验性的 Rust 移植版本 jdvrif-rs 可用。

演示图片:"隐藏之处" / PIN:2190398302048725932
与常见的 LSB 隐写方法(将数据隐藏在封面图像的像素中)不同,jdvrif 主要将数据隐藏在 JPG 图像的 应用程序段(ICC、EXIF、XMP 等)中。
例外情况是 Reddit 平台的隐藏模式(-r),我们使用 QIM 隐写方法(JPEG DCT 域量化索引调制),因为这是目前唯一适用于 Reddit 的存储方法。
默认隐藏模式可以隐藏任何文件类型,最大为 2GB,但其他平台隐藏模式和兼容站点(如下所列)有其各自的 小得多 的大小限制和 *其他要求。
为了增加存储容量和更好的安全性,您的嵌入数据文件会使用 libdeflate/zlib 进行压缩——除非它已经是超过 10 MB 的压缩文件类型——并使用 libsodium 加密库通过 XChaCha20-Poly1305 进行加密。
jdvrif 部分源自安全研究员 David Buchanan 所 实现的技术。
编译与使用(Linux)
$ sudo apt update
$ sudo apt install g++ cmake ninja-build util-linux libsodium-dev libturbojpeg0-dev zlib1g-dev libdeflate-dev
$ chmod +x compile_jdvrif.sh
$ ./compile_jdvrif.sh
$ sudo cp jdvrif /usr/bin
$ jdvrif
用法:jdvrif conceal [-b] <封面图像> <秘密文件>
jdvrif recover <封面图像>
jdvrif --info
$ jdvrif conceal your_cover_image.jpg your_secret_file.doc
输出图像的平台兼容性:-
✓ X-Twitter
✓ Tumblr
✓ Mastodon
✓ Pixelfed
✓ PostImage
✓ ImgBB
✓ ImgPile
✓ Flickr
已保存"文件嵌入"JPG 图像:jrif_4e87c566c.jpg(143029 字节)。
恢复 PIN:[***2166776980318349924***]
重要提示:请妥善保管您的 PIN,以便提取隐藏文件。
完成!
$ jdvrif recover jrif_4e87c566c.jpg
PIN:*******************
已提取隐藏文件:your_secret_file.doc(6165 字节)。
完成!请检查您的文件。
兼容平台
******************
注意:Bluesky 现在默认将图像保存为 WEBP 格式。
要将图像保存为 JPG 格式,以便仍可使用 jdvrif 恢复隐藏数据。
首先点击帖子中的图像将其打开,然后右键单击图像。从菜单中选择 在新标签页中打开图像。
选择新标签页,在地址栏中,移动到地址末尾并添加 @jpg,然后按回车。
右键单击图像,从菜单中选择 图像另存为...
您的图像现在应下载为 JPG 格式,即可与 jdvrif 配合使用。
如果您想要一个使用 WEBP 图像在 Bluesky 上发布隐藏数据的工具,可以使用我的 WEBP 隐写命令行工具 wbpdv
******************
发布大小限制按 封面图像 + 压缩数据文件 的 组合 大小衡量:
● Flickr(200MB)、ImgPile(100MB)、ImgBB(32MB)、
● PostImage(32MB)、Pixelfed(15MB)。
大小限制仅按 压缩数据文件 大小衡量:
● Mastodon(~6MB)、Tumblr(~64KB)、X-Twitter(~10KB)。
例如,对于 Mastodon,如果您的封面图像为 1MB,您仍然可以嵌入最大 ~6MB 大小限制的数据文件。
*其他:Bluesky 平台对 封面图像 和 压缩隐藏数据文件 有 单独 的大小限制:
● Bluesky(-b 选项)。封面图像最大大小限制(2,000,000 字节 / ~1.9MB)。您的压缩隐藏数据文件(有效载荷)最大大小限制(~171KB)。
最终嵌入的封面图像(封面图像 + 隐藏文件)不得超过 2,000,000 字节(~1.9MB)。在 Bluesky 上发布图像需要 "create_bsky_post.py" 脚本。有关此脚本的更多信息,请参见页面下方。
● Reddit(-r 选项)。虽然 Reddit 平台的图像上传大小限制为 20MB,但封面图像的数据存储容量 小得多,取决于图像尺寸大小。
例如,尺寸为 1024x1024 的封面图像只能存储 ~6KB 的数据,尺寸为 4096x4096 的图像可以存储 ~109KB,尺寸为 6324×6324 最大尺寸的图像可以存储 ~254KB。
对于 X-Twitter、Reddit 和 Tumblr 等数据大小限制较小的平台,您可能需要关注压缩效果好的数据,如文本文件等。
https://github.com/user-attachments/assets/c8c38e6d-ea23-4d67-98d9-cebdcd82b449
https://github.com/user-attachments/assets/88aaa5f7-3272-4d0c-aa59-1a5bfe2f08dc
jdvrif 模式 参数:
conceal - 将您的秘密数据文件压缩、加密并嵌入到 JPG 封面图像中。
recover - 从 JPG 封面图像中解密、解压并提取隐藏的数据文件。
jdvrif conceal 模式 平台 选项:
"-r" 要创建兼容的"文件嵌入" JPG 图像以在 Reddit 平台上发布,您必须在 conceal 模式下使用 -r 选项。
$ jdvrif conceal -r my_image.jpg hidden.doc
这些图像仅兼容在 Reddit 上发布。如果发布在其他平台,您的嵌入数据文件将被移除。
从 Reddit 保存/下载图像时,请确保点击帖子中的图像以完全展开后再保存。
https://github.com/user-attachments/assets/9f1b4607-e7f1-4c5f-8929-b42c1a85bb88
"-b" 要创建兼容的"文件嵌入" JPG 图像以在 Bluesky 平台上发布,您必须在 conceal 模式下使用 -b 选项。
$ jdvrif conceal -b my_image.jpg hidden.doc
这些图像仅兼容在 Bluesky 上发布。如果发布在其他平台,您的嵌入数据文件将被移除。
您还需要使用 Python 脚本 create_bsky_post.py(位于仓库 src/bsky 文件夹中)将图像发布到 Bluesky。 如果您通过浏览器网站或移动应用将图像发布到 Bluesky,该脚本将无法工作。
要使用该脚本,您需要从您的 Bluesky 账户创建一个 应用密码。
有关一些基本用法示例,请参阅 src/bsky 文件夹中的 create_bsky_post.py 脚本。
https://github.com/user-attachments/assets/b4c72ea7-40e3-49b0-89aa-ae2dd8ccccb9
第三方软件和资源
核心应用程序
-
libsodium — 加密随机生成、Argon2id 密钥派生和 XChaCha20-Poly1305 秘密流。作为系统库动态链接。
许可证:ISC License
版权所有 (c) 2013–2026 Frank Denis。
-
libjpeg-turbo — JPEG 处理和无损变换。作为系统库动态链接。
本软件部分基于独立 JPEG 小组的工作。
许可证:Independent JPEG Group License, Modified BSD 3-Clause License, and zlib License。
版权所有 © 1991–2020 Thomas G. Lane 和 Guido Vollbeding。
版权所有 © 2009–2023 D. R. Commander。保留所有权利。
版权所有 © 2015 Viktor Szathmáry。保留所有权利。
-
zlib — 流式 zlib 压缩和解压缩。作为系统库动态链接。
许可证:zlib License
版权所有 (C) 1995–2026 Jean-loup Gailly 和 Mark Adler。
-
libdeflate — 快速整缓冲区 zlib 格式压缩。作为系统库动态链接。
许可证:MIT
版权所有 2016 Eric Biggers。
版权所有 2024 Google LLC。
合并的代码和资源
-
base64simd — AVX2 Base64 编码器改编自 Wojciech Muła 的向量 Base64 实现。
许可证:BSD 2-Clause
版权所有 (c) 2015–2018,Wojciech Muła。保留所有权利。
-
Compact ICC Profiles — 嵌入的 Adobe- 兼容 ICC 配置文件。
可选的 Bluesky 发布辅助工具
-
Bryan Newbold / ATProto Hacker Cookbook — create_bsky_post.py — 分叉的 Bluesky 发布辅助工具(src/bsky/bsky_post.py)的基础。 参考请参见 Cookbook 副本
许可证:CC0 1.0 Universal。
-
Requests — HTTP 和 Bluesky API 请求。
许可证:Apache 2.0 / NOTICE
版权所有 2019 Kenneth Reitz。
-
Beautiful Soup 4 — HTML 和 Open Graph 元数据解析。
许可证:MIT
版权所有 (c) Leonard Richardson。
-
Pillow — 图像验证、尺寸和宽高比处理。
许可证:MIT-CMU
PIL 版权所有 © 1997–2011 Secret Labs AB 和 © 1995–2011 Fredrik Lundh 及贡献者。
Pillow 版权所有 © 2010 Jeffrey "Alex" Clark 及贡献者。