3 个版本
0.1.2 | 2023年11月26日 |
---|---|
0.1.1 | 2023年11月13日 |
0.1.0 | 2023年11月3日 |
#2813 in 解析器实现
575KB
443 行(不包括注释)
vb64
快速,SIMD base64 编解码器。
此包实现了尽可能快的 base64 编码和解码。为了获得最佳性能,请使用 -Ctarget-cpu=native
和 -Zbuild-std
进行编译,这将确保理想指令选择。
以下是在 Zen 2 机器上使用 AVX2 指令与 base64
包的性能比较;数字越小越好。
在 Zen 2 机器上,并使用支持 AVX2 的编译器进行编译时,解码速度比 base64
快 2 倍到 2.5 倍,而编码速度大约快 1.2 倍到 1.5 倍;仅使用 SSSE3 时,解码性能与 base64
相当,而编码性能则大大降低。
除非您正在解析嵌入在 JSON 中的 base64 块,否则 base64 解码不太可能成为您应用程序的巨大瓶颈,这很重要;您可能希望考虑使用 Protobuf 这样的二进制格式。
此外,此包使用 std::simd
,因此需要使用 nightly 版本。
许可证:Apache-2.0
lib.rs
:
快速,SIMD base64 编解码器。
此包实现了尽可能快的 base64 编码和解码。为了获得最佳性能,请使用 -Ctarget-cpu=native
和 -Zbuild-std
进行编译,这将确保理想指令选择。
以下是在 Zen 2 机器上使用 AVX2 指令与 base64
包的性能比较;数字越小越好。
![与 base64
的性能比较][graph-png]
在 Zen 2 机器上,并使用支持 AVX2 的编译器进行编译时,解码速度比 base64
快 2 倍到 2.5 倍,而编码速度大约快 1.2 倍到 1.5 倍;仅使用 SSSE3 时,解码性能与 base64
相当,而编码性能则大大降低。
除非您正在解析嵌入在 JSON 中的 base64 块,否则 base64 解码不太可能成为您应用程序的巨大瓶颈,这很重要;您可能希望考虑使用 Protobuf 这样的二进制格式。
此外,此包使用 std::simd
,因此需要使用 nightly 版本。
恒定时间?? 👀
对于解码有效的 base64(以及编码任何消息),实现基本上是恒定时间的,但这主要是偶然的,因为它们是无分支的,并使用基于 shuffle 的查找表。是否相信这可以解码您的私钥 .pem
文件,而不泄露关键材料(OpenSSL 以这种方式 100% 泄露您的私钥),由您自己决定。