2 个版本

0.1.1 2023年12月2日
0.1.0 2023年1月14日

#473密码学

Apache-2.0

35KB
461

隐写术 - 将信息隐藏到图像中

github crates.io docs.rs CI Build codecov

steganographyrs 是一个 Rust 库,可以将信息注入到图像中。

“隐写术”一词意味着隐藏某物。这个定义非常抽象。因此,它有各种实现隐写术目标的方法。这个库依赖于最低有效位。

什么是最低有效位?

  1. 关于使用最低有效位的博客文章

库的使用者

安装

cargo add steganographyrs

命令行界面(CLI)的使用者

您必须提供一些参数,例如您想要执行的模式(加密、解密)。如果您想使用 AES 加密,您需要使用 -p 提供您的秘密密码。

您可以使用 --help-h 查看所有选项。

steganographyrs --help
// or in dev:
cargo run -- help

在图像中隐藏未加密的字符串

steganographyrs -e inject -m "My Secret Message" -i testAssets/prestine.png -o out.png
// or in dev:
cargo run -- -e inject -i testAssets/prestine.png -o out.png -m "My Secret Message"

在图像中隐藏加密的字符串

steganographyrs -e inject -p secret -m "My Secret Message" -i testAssets/prestine.png -o out.png
// or in dev:
cargo run -- -e inject -p secret -i testAssets/prestine.png -o out.png -m "My Secret Message"

从标准输入隐藏字符串,将信息加密到图像中

echo "My Secret Message" | steganographyrs -e inject -p secret -i testAssets/prestine.png -o out.png

通过使用标准输入从外部隐藏字符串,将信息加密到图像中

cat testAssets/message1.txt | steganographyrs -e inject -p secret -i testAssets/prestine.png -o out.png
// or in dev:
cat testAssets/message1.txt | cargo run -- -e inject -i testAssets/prestine.png -o out.png 

在终端标准输出中从图像中恢复字符串

steganographyrs -e extract -i testAssets/image_with_secret_message.png
// or in dev:
cargo run -- -e extract -i testAssets/image_with_secret_message.png

结果发送到标准输出

在终端标准输出中从图像中恢复加密的字符串

steganographyrs -e extract -p secret -i testAssets/image_with_secret_message.png
// or in dev:
cargo run -- -e extract -p secret -i testAssets/image_with_secret_message.png

从图像信息中恢复字符串到文件

steganographyrs -e extract -p secret -i testAssets/image_with_secret_message.png >> message.txt
// or in dev:
cargo run -- -e extract -p secret -i testAssets/image_with_secret_message.png >> message.txt

从图像信息中恢复加密的字符串到文件

steganographyrs -e extract -p secret -i testAssets/image_with_secret_message.png >> message.txt
// or in dev:
cargo run -- -e extract -p secret -i testAssets/image_with_secret_message.png >> message.txt

库的使用者?

您使用名为 steganography 的入口函数,并可以选择选项以通过加密或解密输入图像中的消息来注入和提取信息。

use steganographyrs::steganography;
let result = steganography(steganography_option); // Result is an option that is only filled on the extraction

作为库的开发者

需要安装什么?

您需要安装正确的工具链

rustup toolchain install stable
rustup default stable

为了执行测试覆盖率,您需要安装

cargo install grcov
rustup component add llvm-tools-preview

为了生成基准测试图,您需要安装 GnuPlot

sudo apt update
sudo apt install gnuplot

# To confirm that it is properly installed:
which gnuplot

执行

要获取所有选项,请使用 cargo run

cargo run -- -help

测试

cargo test

测试覆盖率

在运行覆盖率之前,您必须安装一些组件

cargo install grcov
rustup component add llvm-tools-preview

然后,您可以运行

./coverage.sh

有关Mozilla grcov网站的进一步解释https://github.com/mozilla/grcov

文档

文档是通过使用从源代码生成的

cargo doc --open  -document-private-items

测试命令行界面

所有用户命令都正常工作,但您不需要使用

steganographyrs -e true -p secret -m "My Secret Message" -i testAssets/prestine.png -o out.png

您需要使用

cargo run -- -e true -p secret -m "My Secret Message" -i testAssets/prestine.png -o out.png

基准测试

cargo bench

发布

测试货物内容

cargo package --allow-dirty

然后转到 steganographyrs/target/package/ 查看内容

推送新的Cargo包

cargo login
cargo publish --dry-run
cargo publish

依赖项

~16MB
~120K SLoC