C# 在Visual Studio中生成苹果存折优惠券/S-MIME签名

C# 在Visual Studio中生成苹果存折优惠券/S-MIME签名,c#,.net,windows,passbook,wallet,C#,.net,Windows,Passbook,Wallet,我正在尝试在我的系统中创建一个苹果钱包通行证,在阅读和下载后,系统现在可以自动创建.pkass 我的问题是,签名无法在实际中成功创建。如果我使用iPhone并尝试打开.pkpass文件,它将无法打开!!我发现问题是来自于表单签名,如果我使用mac在终端中创建签名,它将创建一个3326字节大小的签名;我的代码只能创建一个3002字节的文件,这意味着签名一定是遗漏了什么 Mac OS X方法和Windows OS方法有很大区别吗 以前有人遇到过这个问题吗?有人知道为什么签名不同吗 有人知道怎么修理它

我正在尝试在我的系统中创建一个苹果钱包通行证,在阅读和下载后,系统现在可以自动创建.pkass

我的问题是,签名无法在实际中成功创建。如果我使用iPhone并尝试打开.pkpass文件,它将无法打开!!我发现问题是来自于表单签名,如果我使用mac在终端中创建签名,它将创建一个3326字节大小的签名;我的代码只能创建一个3002字节的文件,这意味着签名一定是遗漏了什么

Mac OS X方法和Windows OS方法有很大区别吗

以前有人遇到过这个问题吗?有人知道为什么签名不同吗

有人知道怎么修理它吗


这是我的源代码:

var cert=new X509Certificate2(资产文件夹+p12文件,p12密码);
var buffer=File.ReadAllBytes(Path.Combine(assetsFolder,“manifest.json”);
var cont=新内容信息(缓冲区);
var cms=新签署的cms(续,真);
var签名者=新的CmsSigner(证书)
{
IncludeOption=X509IncludeOption.ExcludeRoot,
SignerIdentifierType=SubjectIdentifierType.IssuerAndSerialNumber,
};
cms.计算签名(签名者,真);
var myCmsMessage=cms.Encode();
File.writealBytes(Path.Combine(assetsFolder,“signature”)、MyCMS消息;
非常感谢

------------------------------------更新----------------------

我找到了签名的ans!!! OID和SignerIdentifierType的设置将影响签名 以下是我的解决方案:

        byte[] buffer = File.ReadAllBytes(Path.Combine(assetsFolder, "manifest.json"));
        X509Certificate2 cert = new X509Certificate2(assetsFolder + p12File, p12Password);
        var oid = new Oid("1.2.840.113549.1.7.2");
        ContentInfo contentInfo = new ContentInfo(oid, buffer);
        SignedCms signedCms = new SignedCms(contentInfo, true); 
        var cmsSigner = new CmsSigner(cert);
        cmsSigner.IncludeOption = X509IncludeOption.ExcludeRoot;
        cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
        cmsSigner.SignerIdentifierType = SubjectIdentifierType.SubjectKeyIdentifier;
        signedCms.ComputeSignature(cmsSigner);

        byte[] myCmsMessage = signedCms.Encode();
        return myCmsMessage;