【发布时间】: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