从Botan 2.7.0迁移至3.8.1:EMSA1(SHA-256)兼容问题咨询
问题解答
1. Botan 3.8.1中兼容EMSA1(SHA-256)的签名方式
Botan 3.x版本里,原EMSA1签名方案被更名为Raw,二者语义完全一致:直接对哈希结果进行签名(无额外编码填充)。你需要将算法名称替换为Raw(SHA-256)——注意不能直接写SHA-256,因为PK_Signer需要的是签名方案,而非单纯的哈希算法本身。
修改后的代码示例:
auto ALGORITHM = "Raw(SHA-256)"; auto privateKey = loadPrivateKey(privateKeyFile); std::vector<uint8_t> data(contents.begin(), contents.end()); Botan::AutoSeeded_RNG rng; Botan::PK_Signer signer(*privateKey, rng, ALGORITHM); signer.update(data); std::vector<uint8_t> signature = signer.signature(rng);
2. 解决"Could not find any algorithm named 'SHA-256'"报错
你的配置存在两处问题:
- 缺少
Raw签名方案对应的模块:必须添加pk_pad_raw模块,否则Botan无法识别Raw(SHA-256)签名方案。 - SHA-256对应的核心模块是
sha2,而非sha2_64(sha2_64仅为64位平台的特定优化模块,完整的SHA-2系列哈希算法由sha2模块提供)。
修正后的配置命令:
python ./configure.py --cc=gcc --cpu=x86_64 --os=mingw --minimized-build --amalgamation --enable-modules=rsa,auto_rng,sha2,pk_pad_raw,sha3,hmac
3. 服务器是否需要同步更新算法
不需要。Raw(SHA-256)与原EMSA1(SHA-256)的签名逻辑完全一致:都是对SHA-256哈希值直接进行签名(无填充)。只要服务器端仍使用Botan 2.7.0的EMSA1(SHA-256)进行验证,就能正常校验客户端用Raw(SHA-256)生成的签名,无需同步升级。
内容的提问来源于stack exchange,提问作者YeP
相关产品推荐
相关产品推荐

