c++ - 如何将代码签名算法的 OID 从 CRYPT_ALGORITHM_IDENTIFIER 转换为人类可读的字符串?

标签 c++ winapi code-signing digital-certificate

当我 retrieving a code signing signature来自 Windows 上的可执行文件,CERT_CONTEXT证书指向 CERT_INFO ,它有 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm 成员,其中包含用于签名的算法。

如何将其转换为人类可读的形式?

enter image description here

例如,SignatureAlgorithm.pszObjId可以设置为"1.2.840.113549.1.1.11"字符串,即szOID_RSA_SHA256RSA this long list .我想我可以为它做一个很长的 switch 语句,并将它链接到 "sha256",但我宁愿避免它,因为我不知道这些值中的大部分是什么。是否有 API 可以为我完成所有这些工作?

最佳答案

使用CryptFindOIDInfo获取有关 OID 的信息,包括显示名称和 CNG 算法标识符字符串:

void PrintSigAlgoName(CRYPT_ALGORITHM_IDENTIFIER* pSigAlgo)
{
    if(pSigAlgo && pSigAlgo->pszObjId)
    {
        PCCRYPT_OID_INFO pCOI = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, pSigAlgo->pszObjId, 0);
        if(pCOI && pCOI->pwszName)
        {
            _tprintf(_T("%ls"), pCOI->pwszName);
        }
        else
        {
            _tprintf(_T("%hs"), pSigAlgo->pszObjId);
        }
    }
}

关于c++ - 如何将代码签名算法的 OID 从 CRYPT_ALGORITHM_IDENTIFIER 转换为人类可读的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50973834/

相关文章:

c++ - 什么时候用 Qt 在 opengl 中创建渲染上下文?

c++ - 编写一个 Shell 脚本来运行我的带有输入的程序

c++ - 监视剪贴板更改 c++ 对于所有应用程序 (Windows)

ios - 将构建加载到 iTunes Connect 时出现无效的代码签名权利错误

c++ - 扩展第三方库中的隐式转换

c++ - 在 C++ 中从 vector 中弹出一个特定元素

c++ - 为什么 MessageBox 会默默地失败?

c++ - 在整个硬盘中查找文件

android - 应用程序签名证书和上传证书具有相同的指纹

java - Mavericks 10.9.1 上捆绑的 JDK7 的 MacOS 代码签名