【问题标题】:How to load RSA key pair without Openssl or other Library如何在没有 Openssl 或其他库的情况下加载 RSA 密钥对
【发布时间】:2014-12-13 02:11:06
【问题描述】:

CC对于一个项目,我正在寻找一个简单的 RSA 实现,以通过不安全但现有的通信协议交换一个小秘密。为了让它小巧且易于移植到不同的平台,我不想链接到 OpenSSL 或 Crypto++。我发现作为axTLS 项目的一部分,它具有合适的许可证和易于提取的 RSA 算法。用于加密的 rsa 函数需要两个组件(因为它使用公钥)。 pup_exp 是 65537,模数是密钥的公共部分,priv_exp 是私有部分。

void RSA_priv_key_new(RSA_CTX **ctx, 
        const uint8_t *modulus, int mod_len,
        const uint8_t *pub_exp, int pub_len,
        const uint8_t *priv_exp, int priv_len
    )

为了方便用户使用,我想加载由 OpenSSL 等库生成的 X.509 或 PEM 等证书,但使用 C 或 C++ 代码,而不包括整个 OpenSSL 内容。但目前我什至没有找到通用密钥文件格式的可理解文档。

【问题讨论】:

  • 它们基于 ASN.1(一种用于结构化数据的二进制 XML),因此您应该从至少可以为您执行此操作的库开始。一旦你知道了,你应该能够将二进制密钥(或 base64 编码的密钥)加载到树结构中,然后为你想要的关键部分找到正确的 OID,这可能很容易在 OpenSSL 代码中找到或通过将 OpenSSL 密钥转储的输出与控制台进行比较。
  • axTLS 声称可以处理 X509v1、PKCS#8 和 PKCS#12 格式。这就是你所需要的。不幸的是,大多数证书都是 X509v3,所以你必须小心。
  • @GregS 是的,您的答案是正确的。我找到了解析例程,它们不是真正的美女,但它们会满足我的需要(我希望)。感谢您的提示和警告。

标签: c++ c rsa public-key-encryption


【解决方案1】:

广泛使用的 RSA 公钥格式有两种,它们是 PKCS#1 和 X.509(SubjectPublicKeyInfo)。 我用过 libtomcrypt(http://libtom.org/?page=features)。它支持 RSA 密钥格式并且非常便携。许可证是非限制性的。

【讨论】:

  • 我已经尝试过 libtom(crypt)。你是对的,许可证是非限制性的,但我尝试将库减少到我需要的例程失败。
猜你喜欢
  • 2013-09-20
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2020-02-17
  • 2019-11-16
相关资源
最近更新 更多