michalstankiewicz4-cell/PicMess

GitHub: michalstankiewicz4-cell/PicMess

一个基于 LSB 隐写术的图片加密信息隐藏工具,支持浏览器端和 Node.js 命令行两种使用方式。

Stars: 0 | Forks: 0

# picmess 在图片的像素中隐藏信息(LSB 隐写术,差分编码——每个通道的色阶最多改变 1/255),外加一个独立的通道,用于将密钥隐藏并追加在 PNG 文件的 EOF 之后。无需服务器。 两个版本,核心逻辑相同: - **Web 应用** (`index.html`) —— 完全在浏览器中运行,只需打开即可。这是 该工具的预期使用方式。 - **Node.js CLI** (`bin/picmess.js`) —— 用于从终端进行自动化/脚本操作。 ## Web 版本 只需在浏览器中打开 `index.html`(双击)——它在本地运行,无需安装, 也不需要服务器。你也可以将这 3 个文件(`index.html`、`app.js`、 `styles.css`)托管在任何静态托管服务上(GitHub Pages 等),这样任何人都可以通过 网络使用它。 **隐藏** 选项卡:选择图片源(磁盘文件 / 链接 / 随机图片),输入 信息和密钥,点击“Hide message in image”并下载生成的 PNG 图片。 页面还会显示最终图片的 data URL,你可以将其作为纯文本 复制并粘贴到任何地方。 **提取** 选项卡:上传文件(或提供链接,或粘贴 data URL),可选择性地 输入密钥——如果你将其留空,应用会尝试寻找追加在 文件 EOF 之后的密钥。 注意:通过链接获取图片只有在远程服务器允许 CORS 时才有效(这 适用于“提供链接”和“随机图片”)。如果链接失败,请将 图片下载到磁盘并作为文件上传——这总是有效的。 ## CLI 版本 ### 安装 ``` npm install ``` ### 在来自互联网的随机图片中隐藏信息 ``` node bin/picmess.js hide --random --width 1024 --height 768 \ --message "secret content" --key "password" --output out/result.png ``` ### 在指定链接(例如从 Google Images 复制)的图片中隐藏信息 ``` node bin/picmess.js hide --link "https://example.com/image.jpg" \ --message "secret content" --key "password" --output out/result.png ``` ### 提取信息 ``` node bin/picmess.js reveal --file out/result.png --key "password" ``` 如果你省略 `--key`,程序会尝试寻找追加在 文件 EOF 之后的密钥。 ### 显示追加在 EOF 之后的密钥(不触碰像素) ``` node bin/picmess.js show-key --file out/result.png ``` ## 工作原理 1. **通道 1 —— 像素(LSB):**信息经过加密(AES-256-CTR,密钥通过 密码派生:Web 版本使用 PBKDF2 / CLI 版本使用 scrypt),并 受到 HMAC-SHA256 标签保护。生成的比特被写入连续像素的 R/G/B 通道的最低有效位中——色差 肉眼是不可见的。结果始终保存为 PNG(无损格式),因为 JPEG 会破坏隐藏的比特。 2. **通道 2 —— EOF 之后的数据:**原始密钥被追加在 PNG 文件的 `IEND` 标记之后。浏览器和图像处理软件会忽略 `IEND` 之后的数据,因此图片 看起来和显示时依然正常。 ## 关于 Google Images 搜索的说明 通过关键字自动从 Google Images 获取搜索结果需要 使用 Google Custom Search API(需要 API 密钥 + Search Engine ID,超出免费额度需付费)——直接抓取结果页面违反了 Google 的服务条款。 最简单且完全合法的变通方法是:在 Google Images 中找到图片,复制其 “图片地址”,并将其作为链接提供(在 Web 版本中,或者在 CLI 中使用 `--link`)。
标签:GNU通用公共许可证, MITM代理, Node.js, 信息隐藏, 图像隐写术, 多模态安全, 数据加密, 数据可视化, 浏览器应用, 自定义脚本