openssl - 带有 OPENSSL 的 ECDSA
问题描述
我想在 OPENSSL 中实现 ECDSA。但我得到以下警告
ECDSA_sign 已弃用和 ECDSA_do_verify 已弃用。
谁能指导我如何处理这个错误。
解决方案
看来您正在使用 OpenSSL 的开发版本(将成为 OpenSSL 3.0)。这些功能在 dev 中已弃用,但在最新的稳定版本 (1.1.1) 中未弃用。
在 OpenSSL(包括 ECDSA)中进行签名的首选方法是使用EVP_DigestSign*()
API。
这些功能的手册页在这里:
https://www.openssl.org/docs/man1.1.1/man3/EVP_DigestSignInit.html
为了使用这些,您需要创建一个EVP_PKEY
包含 ECDSA 密钥的对象。通常,这是通过使用创建一个空的EVP_PKEY
,EVP_PKEY_new()
然后使用以下方法为其分配一个 EC_KEY 来完成的EVP_PKEY_assign_EC_KEY
:
https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_assign_EC_KEY.html
EVP_DigestSign*()
这里有使用OpenSSL wiki 上的 API 进行签名和验证的示例代码:
https://wiki.openssl.org/index.php/EVP_Signing_and_Verifying
使用 EVP 函数的另一种替代方法是使用当前稳定版本 (1.1.1),您尝试使用的函数未弃用。但请记住,当 OpenSSL 3.0 发布时,它们将被弃用。
第三种选择是忽略弃用警告。这些功能仍然存在并且可以工作。假设您没有指示编译器将警告视为错误,您仍然应该能够构建您的应用程序。请记住,标记为已弃用的 API 最终可能会在某些未来版本的 OpenSSL 中被删除。
推荐阅读
- android - Android警报对话框未从片段内的片段显示
- asp.net-mvc - 我无法在 plesk Dotnet Core Entity Framework 上连接数据库
- docker - 如何在 docker 中调试 odoo?
- mysql - where 子句中的数字如何影响 sunquery
- angular - 如何使我的应用程序可以通过子域访问?
- php - Spotify web api回调php中的错误
- mysql - 在 SQL Parameter 中传递 NULL 和 Blank 作为参数
- spring-cloud-stream - 仅接收器应用程序停止 - 通道关闭 (smfclient 2) 没有错误
- python - 使用 loc 和 map 更改多列中的值
- python - Python中的决策树:每个节点的拆分数