gpt4 book ai didi

php - 使用 CNG 在 c++ 应用程序中签署数据并在 php api 中验证

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:50 24 4
gpt4 key购买 nike

我阅读了很多关于非对称加密的内容,但仍然无法理解如何逐步实现我所需要的。

我需要什么:

  1. 仅创建 1 个私钥和 1 个公钥一次。
  2. 在用户无法读取的情况下将私钥包含在我的 C++ 应用程序中(当然,一切都可能被黑客入侵,但你明白我的意思,不要让用户以纯文本形式看到它)。
  3. 分发应用。
  4. 然后我的应用程序在使用时将哈希一个字符串。
  5. 使用包含的私钥加密此散列。
  6. 使用 http 请求将此签名哈希发送到我的 api。
  7. 使用我的公钥解密我的 api (php) 中的签名哈希。

我不明白的地方:

使用此处的示例:Signing Data with CNG我不知道如何创建 key ,然后将私有(private) key 存储在我的 C++ 应用程序中,将公共(public) key 存储在我的 api (php) 中。

我取得了什么

我学会了使用 bCrypt 散列和加密/解密数据,但我不明白我必须执行哪些步骤才能实现我之前写的内容

最佳答案

你必须改变设计。目前您的设计存在重大安全漏洞。您对 pubkey/prikey 的概念是正确的,但是实现是不正确的。私钥应保密。目前很容易推导出公钥,给定了很多算法的私钥,但反之则不然。正确的设计如下。

  1. 生成自签名证书。该证书将包含私钥和公钥
  2. 导出公共(public)证书并将其作为资源嵌入/或将其硬编码到您要分发的应用程序中
  3. 然后,应用程序将散列要签名的数据并使用来自应用程序资源的公钥。
  4. 然后,此散列数据将通过 http 发送到您拥有私钥拷贝的服务器。
  5. 服务器将散列数据并使用私钥验证散列。

上述所有步骤在 MSDN 上都有详细的示例记录。如果您需要进一步的帮助,请告诉我,我可以将其指向文章。

以上设计将确保您的私钥永远不会在野外。如果您在应用程序中分发您的私钥,实际上只需几分钟即可获得您的私钥。

在应用程序中存储公钥只是使用字节数组在应用程序中硬编码 key 或将证书放入资源文件中的问题。

key 对的私钥部分不应在任何应用程序中进行硬编码。私钥应该是不可导出的,并且只能由操作系统管理。 Windows 现在有使用 VSM 技术的键盘锁,即使是本地管理员也无法知道私钥。管理员只能将其用于签名和验证(以及导出 key ,如果启用了导出),但永远无法查看私钥并滥用它。

关于逐步过程。

  1. 创建一个自签名证书。这将在 pfx 文件中生成包含公钥和私钥的证书。
  2. 在证书库中导入自签名证书。这可以通过简单地双击文件并按照说明进行操作来实现。
  3. 通过打开证书管理器导出新导入证书的公共(public)部分。
  4. 您可以将此公开导出的证书作为资源嵌入到您的应用程序中。
  5. 然后应用程序可以从资源中加载证书并使用它来签署散列。
  6. 在服务器端,如果带有私钥的证书尚未导入,请按照步骤 2 进行导入。
  7. 然后服务器可以使用 API 来验证使用私钥签名的数据。

关于php - 使用 CNG 在 c++ 应用程序中签署数据并在 php api 中验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com