1

我目前在我的 C++ 软件中使用libxmlsec,并尝试从内存中加载 RSA 私钥。为此,我搜索了 API 并找到了这个函数

它采用二进制数据、大小、格式字符串和几个 PEM 回调相关参数。

当我调用该函数时,它只是卡住了,使用了 100% 的 CPU 时间并且永远不会返回。很烦人,因为我无法找出问题所在。

这是我的代码:

d_xmlsec_dsig_context->signKey =
    xmlSecCryptoAppKeyLoadMemory(
        reinterpret_cast<const xmlSecByte*>(data),
        static_cast<xmlSecSize>(datalen), 
        xmlSecKeyDataFormatBinary,
        NULL,
        NULL,
        NULL
    );

dataconst char*指向我的 RSA 密钥的原始字节(使用i2d_RSAPrivateKey(), 来自OpenSSLdatalendata.

我的测试私钥没有密码,所以我决定暂时不使用回调。

有人已经做过类似的事情了吗?你们有没有看到我可以改变/测试以解决这个问题?

我昨天才发现图书馆,所以我可能会错过一些明显的东西;我只是看不到它。

非常感谢您的帮助。

4

1 回答 1

0

data使用 OpenSSL 函数将格式更改为 PEM,PEM_write_bio_RSAPrivateKey()并将调用的第三个参数更改为xmlSecCryptoAppKeyLoadMemory()使其与新格式匹配。

新代码是:

d_xmlsec_dsig_context->signKey =
xmlSecCryptoAppKeyLoadMemory(
    reinterpret_cast<const xmlSecByte*>(data), // data is now in PEM format
    static_cast<xmlSecSize>(datalen), 
    xmlSecKeyDataFormatPem, // Updated
    NULL,
    NULL,
    NULL
);

从那时起,一切正常:通话不再卡住。

于 2010-04-08T15:19:33.290 回答