gpt4 book ai didi

c++ - 在 Windows CE 3 上将 PEM 转换为 DER

转载 作者:太空狗 更新时间:2023-10-29 23:19:07 24 4
gpt4 key购买 nike

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

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

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

有没有人有可以在 Windows CE 3 上运行的 CryptStringToBinary 替代方案?使用此 API 的开发人员目前没有将 OpenSSL 作为依赖项,因此我不想为此添加它。

最佳答案

嗯 - PEM 只是 base64 编码的 DER。因此,如果这是您唯一需要转换的地方;我只是放弃了 API 的细节;删除任何空行或以“-”开头的行;和 base64 解码之间的任何东西。结果就是您要的 DER。 WindowsCE3 有一个 Encode/Decodeter type for Base64;如果出于某种原因您不想/不能使用它 - How do I base64 encode (decode) in C?http://www.adp-gmbh.ch/cpp/common/base64.html是相当琐碎的“原始”版本。

关于c++ - 在 Windows CE 3 上将 PEM 转换为 DER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com