C++ openssl中pkcs7的摘要选择与加密算法

C++ openssl中pkcs7的摘要选择与加密算法,c++,cryptography,openssl,digital-signature,pkcs#7,C++,Cryptography,Openssl,Digital Signature,Pkcs#7,我正在尝试使用OpenSSL(版本1.0.1)实现数字签名(PKCS7)功能 我对此比较了解 使用API:PKCS7_sign和PKCS7_verify, 我不知道如何设置签名的特定摘要和/或加密算法 PKCS7_sign依次调用PKCS7_sign_add_signer,其第四个参数表示摘要标识符,已硬编码为NULL。这意味着将使用默认摘要算法 因此,我的问题是: 1) 默认情况下使用的摘要和加密算法是什么 2) 有没有办法设置这些默认值?如何做到这一点 3) 假设我签署了一些数据并将其发送给

我正在尝试使用OpenSSL(版本1.0.1)实现数字签名(PKCS7)功能

我对此比较了解

使用API:PKCS7_sign和PKCS7_verify, 我不知道如何设置签名的特定摘要和/或加密算法

PKCS7_sign依次调用PKCS7_sign_add_signer,其第四个参数表示摘要标识符,已硬编码为NULL。这意味着将使用默认摘要算法

因此,我的问题是:

1) 默认情况下使用的摘要和加密算法是什么

2) 有没有办法设置这些默认值?如何做到这一点


3) 假设我签署了一些数据并将其发送给另一方。它如何知道签名中使用的默认算法?[已回答]

根据,默认摘要算法是SHA-1

用于签名的“默认”算法由您为
signkey
参数传入的x509证书中的密钥类型确定。一般来说,这将是一个RSA密钥,但也可以是一个DSA密钥

1)检查文档,2)它们已设置,这就是为什么它们是默认值,但您肯定可以将它们覆盖到您想要的任何内容(如SHA256 ex),最后3)阅读PKCS7规范。OID将签名算法和摘要算法作为格式的一部分包含在其中。此外,与(1)相关的是,在PKCS7_签名文档的注释中,“如果指定了签名者,则将使用默认摘要作为签名算法。对于RSA和DSA密钥,这都是SHA1。”