加解密库-libsodium
libsodium 是一个先进而且易用的加密库,主要用于加密、解密、签名和生成密码哈希等等。这是一个可移植的、跨编译器支持、可安装的,基于 NaCI 开发并提供一个兼容 API。采用C语言实现并在ISC协议下授权。Sodium is a new, easy-to-use software library for encryption, decryption, signatures, password hashing and more.

It is a portable, cross-compilable, installable, packageable fork of NaCl, with a compatible API, and an extended API to improve usability even further.
Its goal is to provide all of the core operations needed to build higher-level cryptographic tools. Supports a variety of compilers and operating systems, including Windows (with MingW or Visual Studio, x86 and x64), iOS, Android, as well as Javascript and Webassembly.
最新版本:1.0
1.0.19 现已于2023年9月中旬发布。此版本包含 1.0.18-stable 的所有更改,以及两项新增内容:
New AEADs:crypto_aead_aegis128l_*() 和 crypto_aead_aegis256_*() 命名空间中新增了 AEGIS-128L 和 AEGIS-256。AEGIS 是面向高性能应用的认证密码系列,利用 x86_64 和 aarch64 上的硬件 AES 加速。除性能外,AEGIS 密码还具有独特的特性,使其比 AES-GCM 更易于使用,也更安全。它们还可用作高性能 MAC。
crypto_kdf_hkdf_*() 命名空间现在提供了许多标准协议所需的 HKDF 密钥生成机制。它是针对 SHA-256 和 SHA-512 哈希函数实现的。
osx.sh 构建脚本已重命名为 macos.sh
删除了对 android-mips 的支持。
From 1.0.18-stable:
Visual Studio:添加了对 Windows/ARM64 builds 的支持。
Visual Studio:在支持的 CPU 上启用了 AVX512 实现。
Visual Studio:添加了 MSVC 2022 解决方案。
Apple XCFramework:添加了对 VisionOS 的支持。
Apple XCFranework:添加了对 Catalyst 的支持。
Apple XCFramework:构建模拟器现在是可选的。
iOS:不再生成 bitcode,因为它已被 Apple 弃用。
watchOS:添加了对 arm64 的支持。
Zig 工具链现在可以用作现代构建系统来替换 autoconf/automake/libtool/make/ccache 和编译器。这可以实现更快的编译时间、更轻松的交叉编译以及针对任何 CPU 进行优化的静态库。
Zig 工具链现在是将 libsodium 编译为 WebAssembly/WASI (X) 的推荐方法。
libsodium 现在可以作为 Zig 项目的依赖项添加。
AES-GCM 实现被完全重写。现在它速度更快,并且也可在 aarch64 上使用,包括 Windows/ARM64。
新增了与 CET instrumentation / IBT / Shadow Stack 的兼容性。
Emscripten:已从 Sumo builds 中删除 crypto_pwhash_*() 函数,因为它们即使在未使用时也会占用大量 JavaScript 内存。
基准测试现在尽可能使用 CLOCK_MONOTONIC。
WebAssembly:现在可以使用 Bun、WasmEdge、Wazero、wasm3 和 wasmer-js 运行测试。对 WAVM 和 Lucet 的支持已被删除,因为这些项目已达到 EOL。
.NET:支持的最低 macOS 版本现在为 1.0.15。
.NET:所有包现在都是在所有平台上使用 Zig 构建的。
.NET:ARM64 的软件包现在可用。
C23memset_explicit() 现在可用。
编译时默认使用 -Ofast 或 -O3 而非 -O2。
可移植性改进有助于将 libsodium 编译到现代游戏机。
JavaScript:不再设置默认的 unhandledRejection 处理程序。
略微加快 25519 操作速度。
OpenBSD:leverageMAP_CONCEAL。
v1.0.20 现已于2024年6月下旬发布,包含自 1.0.19-stable 以来的所有更改,主要解决编译问题和对 .NET 包的改进,主要的更新内容如下:
Building withzig build 现在需要 Zig 0.12。
使用传统的 build system 时,使用 -O3 而不是 -Ofast。
改进了 aarch64 上所需的编译器标志的检测。
提高了与 aarch64 上自定义构建系统的兼容性。
apple-xcframework:如果 Xcode 不包含该 SDK,则不会构建 VisionOS 包。
添加了 crypto_kdf_hkdf_sha512_statebytes()。
使用 Visual Studio 时,现在在 Windows/aarch64 上启用运行时 CPU 功能检测。
在 Windows 上使用 Swift 时,C++ guards 存在影响 libsodium 使用的问题。此问题现已修复。
Emscripten:crypto_aead_aegis*() 函数现在可以在 JavaScript 构建中导出
Emscripten:不支持的 --memory-init-file 选项已被删除。
apple-xcframework:最小部署目标可以设置为 iOS 11+。
.NET 软件包现在包括适用于 Windows/arm64、iOS、TvOS 和 Catalyst 的预编译库。
.NET 预编译库现在可以在任何 CPU 上运行,仅使用 runtime feature 检测。
SYSV 程序集不应在针对 Windows 时使用。
已解决与 LLVM 18 和 AVX512 的兼容性问题。
GitHub attestation build provenance 现已添加到 NuGet 包中。
JavaScript 测试现在可以使用 Bun 作为 Node 的替代品。
v1.0.21 现已于2026年1月上旬发布。此版本更新包含了 1.0.20-stable 版本的所有更改,其中包括对 crypto_core_ed25519_is_valid_point() 函数的安全修复,以及两组新函数:
新 crypto_ipcrypt_实现了对 IP 地址进行安全加密和匿名化的机制。
新增 sodium_bin2ip 和 sodium_ip2bin 辅助函数与 crypto_ipcrypt_* 互补,可轻松实现地址在字节与字符串间的转换。
XOF:crypto_xof_shake* 和 crypto_xof_turboshake* 函数是标准的可扩展输出函数。它们可以从任意长度的输入导出任意长度的输出,并具有与哈希函数相同的属性。许多后量子机制都需要这些,但它们也可用于各种应用,包括密钥派生、会话加密等等。
XCFramework:现在在 Apple Silicon 上强制使用交叉编译,以避免与 Rosetta 相关的构建问题。
Fil-C 编译器开箱即用,无需额外设置。
CompCert 编译器开箱即用,完全受支持。
现在支持 MSVC 2026(Visual Studio 2026)。
Zig 构建现在支持 FreeBSD 目标
一些编译器提高了 ARM 架构上 AES256-GCM 和 AEGIS 的性能。
Android 二进制文件已添加到 NuGet 包中。
Windows ARM 二进制文件已添加到 NuGet 包中。
Android 构建脚本已得到改进。基础 SDK 版本现为 27c,默认平台版本为 21,支持 16 KB 的页面大小。
现在可以使用 Zig 0.15 和 Zig 0.16 编译该库。
现在,对于支持 PIC 的目标平台,Zig 构建默认会生成位置无关的静态库。
XCFramework 软件包中已添加了 arm64e 构建版本。
XCFramework 软件包现在是完整构建版本,而非精简构建。
已为 ARM64 启用 MSVC 构建
XCFramework 构建脚本已移除对 iOS 32 位 (armv7/armv7s) 的支持。
安全性:关键代码路径中引入了 optblockers,以防止编译器通过条件跳转引入不必要的侧信道攻击。此问题已在配备特定编译器和选项的 RISC-V 目标平台上观察到。
安全性:crypto_core_ed25519_is_valid_point() 现在可以正确地拒绝不在 main subgroup 中的 small-order points。
部分 crypto_stream* 函数的 ((nonnull)) 属性已放宽,允许在输出长度为零时使用 NULL 输出缓冲区。
已修复与旧版本 clang 的交叉编译问题。
JavaScript:已添加对 Cloudflare Workers 的支持
JavaScript:为了保持与旧版运行时的兼容性,WASM_BIGINT 已被强制禁用。
修复了 Solaris 系统上旧版工具链的编译问题。
crypto_aead_aes256gcm_is_available 导出至 JavaScript
libsodium 现在与 Emscripten 4.x 兼容。
安全性:在 AEAD 的 MAC 验证后添加内存屏障,以防止在身份验证完成之前对 plaintext 进行 speculative access。
现在,使用 CET instrumentation 构建时,Assembly files 包含 .gnu.property 注释,以提供正确的 IBT 和 Shadow Stack 支持。
v1.0.22 现已于2026年4月中旬发布。此版本更新包含了 v1.0.21的所有更改,此外还包括:
后量子密钥封装现已可用。ML-KEM768(the NIST-standardized lattice-based KEM)可通过 crypto_kem_mlkem768_*() 相关函数调用。
X-Wing 是一种混合型 KEM,它结合了 ML-KEM768 和 X25519,可同时抵御经典和量子攻击,可通过 crypto_kem_*() 函数调用。X-Wing 是大多数应用场景的推荐 KEM。
SHA-3 哈希函数现在以 crypto_hash_sha3256_*() 和 crypto_hash_sha3512_*() 的形式提供,同时提供 one-shot 和 streaming API。
性能:针对 ARM 平台上的 Argon2 进行了 NEON 优化。
性能:SHA3 (Keccak1600) 现在在 ARM 平台上可用时会利用 ARM SHA3 指令。
性能:已添加 Argon2 的 WebAssembly SIMD 实现。
Emscripten:LTO 现已禁用。在 Emscripten 4 中,LTO 生成的 WebAssembly 模块中的函数运行速度明显低于未启用 LTO 的情况。
Emscripten:新增选项,允许使用 SIMD 支持进行编译。
Emscripten:现已支持原生 ESM 模块生成。
JavaScript sumo 构建现在允许使用高达 80 MiB 的内存,因此带有交互式设置的 crypto_pwhash 不仅可以在 WebAssembly 中使用,还可以在纯 JavaScript 中使用。
XOF 状态对齐要求已放宽。
crypto_core_keccak1600_state 已添加。
导出缺失的 crypto_ipcrypt_nd_keygen() 辅助函数。
crypto_auth_hmacsha256_init 和 crypto_auth_hmacsha512_init 现支持接受 NULL key 指针(即密钥长度为零),以与其他_init 函数保持一致。
apple-xcframework:头文件现在位于 Clibsodium 子目录中,以防止 module.modulemap 与其他 xcframework 发生冲突。
修复了在 aarch64 和 gcc 4.x 上使用 GCC 进行编译的问题。
在 aarch64 架构上,即使不使用 clang,包括 MSVC,现在也启用了 aes256-gcm。
当工具集未定义 PlatformToolsetVersion 时,增加了与 Visual Studio 2026 的兼容性。
Libsodium 可以直接作为 Zig 项目的依赖项使用。
MSVC 构建的性能得到了提升。
项目主页:https://github.com/jedisct1/libsodium