c ++ / RSA转换密钥
c++ / RSA convert key
我正在尝试用RSA加密一些东西。
但是我的 rsa 库无法使用 x509 密钥。所以我尝试使用 openssl 将其转换为 DER 密钥。
但我真的不明白它是如何工作的。 我发现了两个看起来还可以的类,但我无法弄清楚如何使用它们。
该函数是:
-i2d_X509
-X509
我确实找到了一段代码,但我无法理解它:
int len;
unsigned char *buf, *p;
len = i2d_X509(x, NULL);
buf = OPENSSL_malloc(len);
if (buf == NULL)
/* error */
p = buf;
i2d_X509(x, &p);
如果你能帮我,那就太好了。
i2d_X509
表示将X509
对象从内部表示(X509
结构)转换为DER编码表示(通过缓冲区或文件中复制)。
所以,在这个代码中行
len = i2d_X509(x, NULL);
您正在确定在 DER 中表示给定证书所需的缓冲区长度或字节数。
然后,你分配了那么多内存和最终语句
len = i2d_X509(x, &p);
将X509 *
证书以 DER 格式复制到此缓冲区中。
此缓冲区可以保留在文件中,并将其另存为证书文件,例如.cer.crt,并且可以使用任何证书工具打开。
回到您的问题,您可以将此缓冲区用于接受 DER 证书的程序。
但是你提到了钥匙,是吗?
如果您需要RSA
公钥,则可以执行以下操作。
您可能需要首先使用 X509_get_pubkey
提取密钥,这将在结构EVP_PKEY
提供密钥。
EVP_PKEY * pkey;
pkey = X509_get_pubkey(x);
RSA * rsa;
rsa = EVP_PKEY_get1_RSA(pkey);
现在,将此RSA
结构输出到 DER 中。
int len;
unsigned char *buf, *p;
len = i2d_RSAPublicKey(rsa, buffer, buffer_length);
根据密钥将buffer
分配给足够大的长度,例如 4000。
我认为这会对你有所帮助。
相关文章:
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 允许从 std::map 的密钥窃取资源?
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 如何修复无效的API密钥,IP或操作权限错误?
- 所有可能的链接生成器与64位密钥
- 如何在unordered_map中更改密钥?
- 获取当前密钥状态?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 将密钥发送到非前台的游戏窗口
- 有哪些方法可以对基于 256 位密钥的矩阵进行加扰?
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 如何将CNG密钥转换为OpenSSL EVP_PKEY(反之亦然)?
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- 将 map
转换为 void* 并返回并获取密钥 - 如何将UCHAR虚拟密钥代码转换为std::string
- c ++ / RSA转换密钥
- BCrypt如何将字节转换为密钥句柄
- 绑定密钥?(c)(将字符串转换为函数)
- ANE C API -转换uint8_t字符串到MFC虚拟密钥代码