在 Windows CE 3 上将 PEM 转换为 DER
Translate PEM to DER on Windows CE 3
我有一个RSA公钥加密包装器,它在桌面Windows和Windows Embedded/POSReady中运行良好。我需要将此系统移植到 Windows CE 5 和 Windows CE 3。在此系统的一部分中,我允许开发人员以多种编码导入各种加密对象,例如证书和密钥。最常用的编码是 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版本中不存在。虽然我可以取消对不太流行的编码(例如十六进制(的支持,但我真的不想在 CE 3 版本的 API 中删除对 PEM 编码的支持。
没有人有CryptStringToBinary
的替代方案可以在Windows CE 3上运行?使用此 API 的开发人员目前没有 OpenSSL 作为依赖项,因此我宁愿不要仅为此添加它。
好吧 - PEM 只是 base64 编码的 DER。因此,如果这是您唯一需要转换的地方;我只是放弃了 API 的细节;去掉任何空行或以"-"开头的行;和 base64 解码介于两者之间的任何内容。结果就是你所追求的 DER。WindowsCE3 具有 Base64 的编码/解码器类型;如果由于某种原因您不想/不能使用它 - 如何在 C 中编码(解码(base64?或者 http://www.adp-gmbh.ch/cpp/common/base64.html 是相当微不足道的"原始"版本。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 在C++中将 PEM 转换为 DER
- 将DER编码的X509证书缓冲区转换为Windows cert_context结构
- 如何在 openSSL 中将 DER 编码字符串的向量转换为 x509
- 在 Windows CE 3 上将 PEM 转换为 DER