首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows CE 3上将PEM转换为DER

在Windows CE 3上将PEM转换为DER
EN

Stack Overflow用户
提问于 2012-05-17 04:59:10
回答 1查看 501关注 0票数 3

我有一个RSA公钥加密包装器,它在桌面Windows和Windows Embedded/POSReady中工作得很好。我需要将此系统移植到Windows CE 5和Windows CE 3。在此系统的一部分中,我允许开发人员以多种编码导入各种加密对象,如证书和密钥。最常用的编码是Base64编码的PEM。在大多数版本的Windows上,很容易将编码转换为Windows在CryptDecodeObjectEx调用时所需的二进制(DER)格式:

代码语言:javascript
复制
bool MyClass::externalToBinary( const DATA_BLOB &in, DATA_BLOB &outDER )
{
    DWORD flags;

    // This call determines the format and how much memory is needed in outDER
    if ( ::CryptStringToBinaryA( reinterpret_cast<char *>(in.pbData), in.cbData, CRYPT_STRING_ANY,     NULL, &outDER.cbData, NULL, &flags ) == false &&
         ::CryptStringToBinaryA( reinterpret_cast<char *>(in.pbData), in.cbData, CRYPT_STRING_HEX_ANY, NULL, &outDER.cbData, NULL, &flags ) == false )
    {
        // Log errors here using ::GetLastError();
        return false;
    }

    if ( ( outDER.pbData = new unsigned char[outDER.cbData] ) == NULL )
    {
        // Log errors here using ::GetLastError();
        return false;
    }
    return ( ::CryptStringToBinaryA( reinterpret_cast<char *>(in.pbData), in.cbData, flags, outDER.pbData, &outDER.cbData, NULL, NULL ) != FALSE );
} // end externalToBinary

不幸的是,在Windows CE3的CryptoAPI版本中不存在CryptStringToBinary。虽然我可以取消对不太流行的编码(如十六进制)的支持,但我真的不想在API的CE3版本中删除对PEM编码的支持。

有谁有可以在Windows CE3上工作的CryptStringToBinary替代方案吗?使用此接口的开发人员目前没有OpenSSL作为依赖项,因此我不希望仅为此而添加它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-08 19:04:55

简单地说,PEM是base64编码的DER。因此,如果这是您唯一需要转换的地方;我将放弃API的细节;去掉任何空行或以‘-’开头的行;然后base64解码介于两者之间的任何内容。结果就是你想要的DER。WindowsCE3有一个用于Base64的编码/解码器类型;如果出于某种原因你不想/不能使用它- How do I base64 encode (decode) in C?http://www.adp-gmbh.ch/cpp/common/base64.html是相当普通的“原始”版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10626617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档