使用Crypto++ 7生成Ed448 ECDSA密钥遇UnknownOID异常求助
解决Crypto++ 7中Ed448 ECDSA密钥生成的UnknownOID异常问题
我太懂你遇到的这个坑了——Crypto++ 7对Ed448这类Edwards曲线的处理逻辑和旧版本完全变了,咱们直接说解决方案:
问题根源
Crypto++ 7开始把Edwards曲线(包括Ed25519、Ed448)从通用的ECIES<ECP>框架里剥离出来,改用专门的类实现。你之前用的ASN1::curve448() OID,在ECP模板的上下文里已经不被识别,所以才会抛出UnknownOID的BER解码异常。
正确的代码实现
直接使用Crypto++ 7提供的Ed448专属密钥类来生成密钥对:
#include <cryptopp/ed25519.h> #include <cryptopp/osrng.h> int main() { CryptoPP::AutoSeededRandomPool rng; // 生成Ed448私钥 CryptoPP::Ed448::PrivateKey privateKey; privateKey.GenerateRandomWithKeySize(rng, 448); // 从私钥导出公钥 CryptoPP::Ed448::PublicKey publicKey; privateKey.MakePublicKey(publicKey); // 后续可以基于这对密钥进行Ed448签名/验证操作 return 0; }
编译注意事项
编译时记得链接Crypto++库,比如用GCC编译的命令:g++ your_code.cpp -o ed448_demo -lcryptopp
内容的提问来源于stack exchange,提问作者Cyclic3
相关产品推荐
相关产品推荐

