LSB · PNG · 可选 AES-256-GCM
载入图像以查看其容量。
功能说明
图片隐写术工具把一条秘密消息隐藏进一张普通的 PNG 图片中 - 也能把消息读取出来。它使用最低有效位(LSB)编码:每个像素的红、绿、蓝通道保持原值不变,只有最后一位被用来存储你的消息的一个比特。一张 1000 × 1000 的图片以这种方式可以携带约 375 KB 的数据,同时看起来与原图逐像素一致,因为通道值 ±1 的变化肉眼完全不可见。
消息还可以先用 AES-256-GCM 加密(密码通过 PBKDF2 派生密钥,10 万次迭代),这样即使有人知道这张图片携带了数据,没有密码也无法读取。工具 100% 在客户端运行:你的图片、消息和密码永远不会离开浏览器。
使用方法
- 用左上角的 Hide / Extract 切换开关选择模式。
- Hide: 拖放(或点击选择)一张载体 PNG。工具会显示它的大小和容量 - “这张图片最多可容纳 N 个字符”。
- 输入你的秘密消息,以及可选的密码(AES-256-GCM)。容量行会实时跟踪你已使用了多少字节。
- 点击 Hide message in image。隐写 PNG 会自动下载,同时展示前后对比图,证明两张图在视觉上完全一致。
- Extract: 切换模式,放入隐写 PNG,如果加密时用了密码则输入密码,点击 Extract hidden message。消息会显示出来,旁边带一个 Copy 按钮。
示例
隐藏一条消息
载体:photo.png(800 × 600)· 消息:Meet me at the airlock at 21:00 · 无密码
Capacity: 179,996 characters → downloads photo-stego.png
Pixels changed: 244 of 1.44M channels, each by exactly 1
同一条消息带密码隐藏
消息:Meet me at the airlock at 21:00 · 密码:reactor-key
Extract without a password →
"This image contains an encrypted message - a password is required"
Extract with reactor-key → "Meet me at the airlock at 21:00"
Extract with wrong-key →
"Decryption failed - wrong password or corrupted data"
从一张干净图片中提取
放入一张不携带隐藏数据的 PNG:
"No hidden message found in this image"
补充说明
- 为什么用 PNG: 隐写术需要无损格式。PNG 存储精确的像素值,因此 LSB 数据在保存、复制和重新上传后仍然存活。JPEG 是有损格式 - 它的重新压缩会改写像素数据,摧毁隐藏的消息。始终以 PNG 格式分享隐写图片。
- 容量: floor(width × height × 3 / 8) 字节,减去 4 字节的头部(使用密码时还要减去 44 字节的盐 + IV + GCM 标签)。照片和噪声多的图片比平坦的图形隐藏数据更隐蔽,后者的 LSB 噪声在统计上可能被检测出来。
- 加密是经过认证的: AES-GCM 能检测出错误的密码和被篡改的像素,而不是返回乱码。
- 不能只依赖隐写: LSB 隐写隐藏的是消息的存在性;统计分析仍然可能标记出可疑图片。要获得强保密性,请使用密码 - 这样即使载荷被发现也无法读取。
- 私密: 100% 在客户端运行 - 适合秘密信息。
- 相关工具: Text Encryptor(纯消息加密)、File Encryptor(整文件 AES-256-GCM)、EXIF Stripper。