选择载体图片或音频文件
上传、拖入或粘贴将承载数据的图片、WAV 或 MP3。文件越大容纳越多,细节丰富的照片或音乐最能隐藏变化。
steghide 0.5.1 的浏览器移植版,涵盖其两种方法:针对 BMP 和 PNG 的像素/LSB,以及针对 JPEG 的 DCT 系数——还加上 PCM WAV 和 MP3 音频载体。隐藏一个文件或一段消息,再用口令重新揭示。
你的文件与秘密绝不离开这台设备。解码、嵌入、加密与提取全部在这个浏览器标签页内运行。绝不会上传到服务器——因此也无可泄露。
容器越大容纳越多:图片大约每八个像素一字节,PCM WAV 每十六个样本一字节,MP3 则取决于其音频帧未使用的空间。
steghide 命令行工具读取文件,请使用 BMP——PNG 输出保留相同的原始像素阵列,但 steghide CLI 无法读取 PNG。
要揭示隐藏在这张图片里的秘密,请与我一同施法:用指针围绕图片画三个完整的圈——顺时针或逆时针均可——隐藏的数据就会自己显现。
你绘制时轨迹会发光,每完成一个闭合的圈就点亮一个月亮。抬起指针或离开图片,咒语就会消退。没有指针?聚焦图片并按 Enter。
恢复的文件名、体积与校验和状态会显示在这里。文本以文本展示,图片以图片展示,音频附播放器——其他内容只能下载。
无需安装、无需上传:选一张图片、一个 WAV 或 MP3,加入你的秘密,保存结果。
上传、拖入或粘贴将承载数据的图片、WAV 或 MP3。文件越大容纳越多,细节丰富的照片或音乐最能隐藏变化。
附上任意文件或输入一段消息,然后选择一个口令。口令决定数据散布在哪里,并可选地对其加密。
为兼容 steghide 保存为 BMP,或为更小体积保存为 PNG。任何拥有图片和口令的人都能揭示数据。
ImageSteg 是 steghide 0.5.1 的 TypeScript 移植版,涵盖其两个分支:针对 BMP 和 PNG 的像素/LSB 方法,以及针对 JPEG 的 DCT 方法。在此基础上,它以相同方式在 PCM WAV 音频中携带数据,也在 MP3 帧未使用的尾部携带。它们都不会简单地顺序遍历文件。
样本被分组为顶点,由最小权重匹配决定修改什么,因此每个隐藏值大约只触及一个样本。
内置的 JPEG 熵编解码器读取量化后的 DCT 系数,把数据隐藏在它们的奇偶性中并重新编码——正是 steghide 的 libjpeg 停止的流水线位置。基线与渐进文件都能处理。
由 MD5 加种的置换把数据散布到整张图片,因此隐藏载荷不会以可预测的顺序存储。
zlib 在嵌入前缩小载荷,可选的 CRC32 校验和能立即告诉你提取结果是否可信。
采用与 libmcrypt 相同密钥推导的 CBC 模式 Rijndael,即使有人怀疑某张图片,载荷仍保密。
在图片像素中隐藏数据的实际限制。
兼容性:位布局、样本置换以及 Rijndael/CBC 加密均遵循 steghide 0.5.1,因此 BMP 和 JPEG 输出可用 steghide extract -sf image.bmp -p passphrase 或 -sf image.jpg 读取,而 steghide 命令行工具生成的文件也能在此读取。输出格式总是与载体一致:JPEG 载体生成 JPEG,因为载荷位于只有 JPEG 才能携带的系数中。像素载体则在 BMP 之外提供 PNG;steghide CLI 不读取 PNG。
steghide 的 JPEG 支持调用 libjpeg 的 jpeg_read_coefficients(),它在 Huffman 解码后立即停止解码流水线——在反量化与 IDCT 之前。剩下的是原始量化 DCT 系数。浏览器没有提供获取它们的 API,因此本页面自带一个 JPEG 熵编解码器,而不使用原生解码器。它涵盖基线文件与渐进文件,包括它们的逐次逼近细化扫描。
jpeg_write_coefficients() 完全一致,因此算术编码源在输出时会被重标为基线(或渐进)。嵌入器从不关心文件格式——它只处理解码后的像素阵列,因此 steghide 的 BMP/LSB 方法原封不动地适用于 PNG。实际中有四个细节重要:
是的。隐藏与揭示数据都免费,无需注册、无水印,也没有人为的文件体积限制。
不会。解码、嵌入、压缩与加密全部在你浏览器中通过 JavaScript 和 WebCrypto 本地完成,不会发送任何内容到 73hi 服务器。
任何你浏览器能解码的图片都可作为像素载体,基线或渐进 JPEG 文件则走 steghide 的 DCT 分支。输出格式跟随载体:JPEG 输入则 JPEG 输出;像素载体会生成 BMP 加一份 PNG。steghide 命令行工具能读取 BMP 和 JPEG 输出,但不支持 PNG。
在量化后的 DCT 系数中,与 steghide 命令行工具完全一致。页面内置一个 JPEG 熵编解码器,把扫描解码到系数层,修改它们的奇偶性后重新编码。
可以。渐进式文件会通过其完整的扫描序列解码——频谱选择与逐次逼近细化——并以相同方式写回,因此结果仍是携带原始系数的渐进式 JPEG。
支持读取。使用 QM(二进制算术)编码而非 Huffman 的文件——顺序型为 SOF9,渐进型为 SOF10——通过与 libjpeg 自身相同的算术解码器解码,因此得到的系数完全一致。结果以 Huffman 编码写回,与 steghide 一致。
大致每八个像素可容纳一字节载荷,再扣除头部、存储的文件名与可选加密开销所占空间。选定图片后工具会显示可用容量。
能,如果你下载的是 BMP。位布局、基于口令的样本置换以及 Rijndael/CBC 加密均遵循 steghide 0.5.1。
载荷存储在单个像素值中。重新压缩、缩放、滤镜或转换为 JPEG 等有损格式都会摧毁它。请保留原始 BMP 或一份无损 PNG。
不能通过向同一文件嵌入两次来实现。第二次嵌入会在整个载体上选择自己的随机位置,覆盖第一次载荷的一部分;由于数据先压缩再加密,少量翻转的位就会使整条消息无法读取——你会完全丢失而非部分丢失。原版 steghide 命令行工具行为相同。重用相同口令也没用:它会从头重写相同位置,因此只有最新的消息能存活。若确实需要多层,请改用嵌套文件——先把第一个秘密隐藏在一张小图片中,下载该结果,再把整个文件在第二个口令下隐藏到一张更大的图片里。每一层都能逐字节保持完整,因为它作为受保护的数据传输,而非修改后的像素。
不会。加载文件只读取其字节:JPEG 载体直接到量化 DCT 系数,不做反变换或重新量化;像素载体无损解码,因此隐藏数据完好无损。JPEG 因熵编码重写可能保存为略不同的体积,但不影响载荷。你可以安全打开别人准备的文件并揭示其中内容。
能。把你的版权声明或所有权证明直接嵌入照片。数据存在像素(或 JPEG 系数)中,正常观看时保持不可见,因此你可以公开分享图片而无人察觉。如果有人未经许可使用,隐藏标记仍在文件里——当你在第三方平台发布同一张图片以记录侵权时,那份发布的副本也携带你的证明,为你发起下架或索赔提供有力证据。
当然可以。把一句“我爱你”——或任何难以当面启齿的话——隐藏在一张日常生活的普通照片里,并把口令设为对方的生日。把照片发给他们,请他们在 ImageSteg(或访问 73hi.net/image-steg.html)上打开解锁。只有知道口令的人才能揭示这句话,因此你可以不必尴尬地说出口也能表达心意。