我需要为使用 VB6/CAPICOM 组件的现有 Classic Asp 网站编写测试工具。目的是重新创建 SignedData.Sign() 的结果,以便我可以将其发布到 Classic Asp 网站,在那里它将使用 CAPICOM 解码有效负载。
VB6 CAPICOM 供参考
Function SignContent(ByVal strXmlToSign As String) As String
Dim strSignedString As String
Dim objSign As SignedData ‘ From CAPICOM library
Set objSign = New SignedData
objSign.Content = strXmlToSign
strSignedString = objSign.Sign
Set objSign = Nothing
SignContent = strSignedString
End Function
我一直在这里使用 CAPICOM 文档作为指南
C# 等价物
public string Sign(string dataToSign)
{
ContentInfo contentInfo = new ContentInfo(Encoding.UTF8.GetBytes(dataToSign));
// Create a new, nondetached SignedCms message.
SignedCms signedCms = new SignedCms(contentInfo);
// get cert from store by Serial Number
X509Certificate2 cert = GetCertificateBy("my-cert-serial-number");
CmsSigner signer = new CmsSigner(cert);
// Sign the message.
signedCms.ComputeSignature(signer);
// Encode the message.
var encoded = signedCms.Encode();
// mimic default EncodingType; CAPICOM_ENCODE_BASE64 Data is saved as a base64 - encoded string.
return Convert.ToBase64String(encoded);
}
到目前为止,C# 生成的签名无法被 CAPICOM 组件解码。