【问题标题】:What does a C++ project need to sign files with certificate (RSA-SHA256)C++ 项目需要用证书签署文件 (RSA-SHA256)
【发布时间】:2018-05-30 16:41:27
【问题描述】:

我正在使用 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/

鉴于此加密过程在我的应用程序中将非常小,我希望有一个需要最少集成和学习的选项。

【问题讨论】:

    标签: c++ qt openssl rsa-sha256


    【解决方案1】:

    似乎有一个函数RSA_sign 可以做到这一点,如果您要使用 OpenSSL 自己实现它。您可以手动获取文件的 SHA256(同样,使用 OpenSSL)RSA_sign,然后使用RSA_verify检查其有效性。

    See here...

    编辑: Here 是一个关于如何从 PEM 证书中提取私钥数据的示例 - 当然,如果您的证书是 PEM 格式的。 PEM 基本上包括一个人类可读的标头,以及 base64 格式的以下关键数据。您可以检查您的证书文件是否以-----BEGIN RSA PRIVATE KEY----- 行开头。

    【讨论】:

    • 'RSA_sign() 使用 PKCS #1 v2.0 中指定的私钥 rsa 对大小为 m_len 的消息摘要 m 进行签名。当我在文本编辑器中打开私有证书时,私钥 rsa 指示的字符串是否相同?也就是说,我是否只是简单地读取证书的字符串内容并从中构造一个“RSA”密钥对象?
    • 仅供参考,以-----BEGIN RSA PRIVATE KEY----- 开头的“证书文件”不是证书文件;这正是标题所声称的:一个 RSA 私钥(PEM 编码,以防不明显)。通常带有附加私钥的证书在 PKCS12 存储中被广泛使用。此答案中链接的示例用于导入 PEM 编码的 RSA 私钥;不是证书。很可能它仍然是相关的,因为 OP 很可能实际上在某个地方拥有私钥,但仍然可能是准确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2017-11-04
    • 2011-09-15
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多