Java调用CMSSignedDataGenerator生成的数字签名DER格式错误,以下3个地方均出错(长度字节不应该为80):

Java代码为:
try {
//获取私钥
FileReader keyReader = new FileReader(keyPath);
PEMParser pemParser = new PEMParser(keyReader);
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
PrivateKeyInfo privateKeyInfo = PrivateKeyInfo.getInstance(pemParser.readObject());
PrivateKey prikey = converter.getPrivateKey(privateKeyInfo);
//获取证书
CertificateFactory certificatefactory = CertificateFactory.getInstance("X.509", "BC");
InputStream bais = new FileInputStream(certPath);
X509Certificate cerx509 = (X509Certificate) certificatefactory.generateCertificate(bais);
//添加Certificates
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
List certList = new ArrayList();
certList.add(cerx509);
Store certs = new JcaCertStore(certList);
gen.addCertificates(certs);
//添加SignerInfo
ContentSigner sha1Signer = new JcaContentSignerBuilder("SM3withSM2").setProvider("BC").build(prikey);
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider("BC").build()).build(sha1Signer, cerx509));
//生成SignedData
CMSTypedData msg = (CMSTypedData) new CMSProcessableByteArray(srcMsg.getBytes(charSet));
CMSSignedData sigData = gen.generate(msg, true);
return sigData.getEncoded();
} catch (Exception e) {
e.printStackTrace();
return null;
}