10 个稳定版本 (4 个主要版本)
4.0.0 | 2022 年 10 月 26 日 |
---|---|
3.1.7 | 2022 年 8 月 29 日 |
3.1.5 | 2022 年 7 月 28 日 |
2.0.0 | 2022 年 7 月 12 日 |
0.0.1 | 2022 年 7 月 10 日 |
#2488 在 命令行实用程序 中
每月 28 次下载
14KB
197 代码行
xorsum
算法
它使用 XOR 密码 来计算 校验和摘要。基本上,它将数据分割成与摘要大小相同的块(用 0 填充),并将所有块之间进行 XOR
运算,得到一个新的块作为输出。
这不是一个好的 哈希函数。它缺乏 雪崩效应,因为翻转 1 个输入位会翻转 1 个输出位。
程序
默认情况下,原始摘要大小为 64 位(8 字节),但可以使用 --length
选项设置为任何有效的 usize
值。实际大小更大,因为原始摘要默认转换为十六进制。我选择 8,因为 CRC32 使用 4,MD5 使用 16,并且为了使降级实现更容易复制,因为 64 位可以适合 CPU 寄存器并且可以使用 2 个 u32
来模拟。
初始化向量是硬编码为 0。
名称和行为受到 cksum
、md5sum
和 b3sum
的极大影响。
用法
从 crates.io 注册表安装最新版本
cargo install xorsum
这并不保证是最新版本,但永远不会抛出编译错误。
从 GH 安装最新开发版本
cargo install --git https://github.com/Rudxain/xorsum.git
这是 最新版本。编译不一定保证。Semver 可能已损坏。并且 --help
可能不会反映实际程序行为。
要获取已编译的非开发可执行文件,请访问GitHub发行版。 *.elf
文件只能与GNU-Linux x64兼容。 *.exe
文件只能与Windows x64兼容。这些不是设置/安装程序,它们与cargo
安装的相同可执行文件相同,因此您应从终端CLI运行它们,而不是单击它们。
有关Llamalab Automate实现,请访问XOR哈希器。
参数"语法"
xorsum [OPTIONS] [FILE]...
要获取有关选项的ℹ信息,请运行
xorsum --help
示例
常规使用
# let's create an empty file named "a"
echo -n > a
xorsum --length 4 a
# output will be "00000000 a" (without quotes)
# write "aaaa" to this file and rehash it
echo -n aaaa > a
xorsum a -l 4
#out: "61616161 a"
# because "61" is the hex value of the UTF-8 char "a"
# same result when using stdin
echo -n aaaa | xorsum -l4
#61616161 -
xorsum a --brief #`-l 8` is implicit
#6161616100000000
注意:
echo -n
的行为取决于操作系统和二进制版本,可能包括行结束符如\n
(LF)或\r\n
(CR-LF)。示例中显示的输出是(通常是所需的结果)不包括EOL。PowerShell会忽略
-n
,因为echo
是Write-Output
的别名,因此无法识别-n
。Write-Host -NoNewLine
不能进行管道传输或重定向,因此这不是一个好的替代方案。
模拟🏔AE
--length
不会截断输出
xorsum some_big_file -bl 3 #"00ff55"
xorsum some_big_file -bl 2 #"69aa" NOT "00ff"
如您所见,-l
可以从相同的输入返回非常不同的哈希值。这种属性可以被利用来模拟Avalanche效应(在一定程度上)。
寻找损坏的字节
如果您有文件的两个副本,其中一个已损坏,您可以尝试"🔺️三角化"损坏字节的索引,而无需手动搜索整个文件。这对于处理大型原始二进制文件非常有用。
xorsum a b
#6c741b7863326b2c a
#6c74187863326b2c b
# the 0-based index is 2 when using `-l 8`
# mathematically, i mod 8 = 2
xorsum a b -l 3
#3d5a0a a
#3d590a b
# i mod 3 = 1
xorsum a b -l 2
#7f12 a
#7c12 b
# i mod 2 = 0
# you can repeat this process with different `-l` values, to solve it easier.
# IIRC, using primes gives you more info about the index
有一些程序(如diff
)会为您比较字节,并且更高效、更易于使用。但如果你喜欢数学谜题,这是通过解决线性模方程组来消磨时间的不错方式。
个人想法
我很惊讶找不到任何完全基于XOR
操作的校验和算法实现。因此,我为了完整性而发布了这个,因为我正在学习Rust。我还为低功耗设备的人做了这个。
⚠免责声明
- 不要分享私人数据的哈希值。您可能会泄露敏感信息。小哈希和大文件通常更安全,因为sbox(可能)有足够的字节来"混合得好"。
- 此程序未经过生产准备。版本应该是
0.x.y
,以反映代码的不完整性。我为给您带来的不便和潜在的混淆表示歉意。
依赖项
~3MB
~60K SLoC