我有一张智能卡,它存储我的私钥并执行有限的加密操作,我需要生成一个PKCS#7签名文件。智能卡附带的库不支持PKCS#7,但我可以使用它生成签名。
考虑到明文有效负载、证书和签名(不是私钥),我是否可以使用成熟的开放源代码库(如openssl )来构建内容?
我知道我可以调用openssl中的各种函数一次执行所有操作(包括签名),但这需要访问私钥,而我的代码无法提取私钥。
发布于 2022-11-27 16:41:00
是的,System.Security.Cryptography.Pkcs包提供了一个抽象,允许在硬件设备上计算签名。
public byte[] Sign(byte[] data, X509Certificate2 cert)
{
ContentInfo contentInfo = new ContentInfo(_sha256.ComputeHash(data));
SignedCms signedCms = new SignedCms(contentInfo);
CmsSigner cmsSigner = new CmsSigner(cert);
cmsSigner.IncludeOption = X509IncludeOption.WholeChain;
signedCms.ComputeSignature(cmsSigner);
return signedCms.Encode();
}发布于 2018-06-06 11:42:53
您可以通过创建一个OpenSSL引擎来完成此任务,该引擎将在需要私钥操作时与卡进行通信。
https://stackoverflow.com/questions/50698179
复制相似问题