我正在使用Qt开发应用程序,并且在某些时候,我被要求使用SHA-256加密并“签署”提供私有证书的文件。我在OpenSSL和证书上做了相当多的读数,但我无法理解如何在C ++代码中执行该过程。
本质上,我正在尝试相当于这个命令:
openssl dgst -sha256 -out output.txt -sign certificate.pem input.txt
我已经探索了可用的Qt类,即:
QSslCertificate类有一个摘要方法,似乎是相关的。同样,我可以使用QCryptographicHash :: hash获取文件的散列内容。但在任何地方我都找不到使用包含RSA密钥的证书“签名”文件的任何提及。
我不能说我完全理解签名过程,但我听到的术语是使用RSA算法“屏蔽”生成的SHA256哈希 - 我假设是通过OpenSSL -sign参数实现的。
如果Qt从未打算实现这一目标,那么最简单或最典型的替代方案是什么。我希望我需要包含另一个库?或者我只是潜入探索OpenSSL库并尝试将它们包含在我的项目中? https://www.openssl.org/docs/manmaster/man3/
鉴于此加密过程在我的应用程序中会有多小,我会感谢一个需要最少集成和学习的选项。
答案 0 :(得分:0)
如果您自己使用OpenSSL实现它,似乎有一个函数RSA_sign
正是如此。您可以手动获取文件的SHA256(再次使用OpenSSL),RSA_sign
,并使用RSA_verify
检查其有效性。
修改强>
Here是如何从PEM证书中提取私钥数据的示例 - 当然,以防您的证书采用PEM格式。 PEM基本上包括一个人类可读的标题,并遵循base64格式的关键数据。您可以检查证书文件是否以-----BEGIN RSA PRIVATE KEY-----
行开头。