我正在创建一个能够生成 CFDI 的 XML 文件的模块。其中一个要点是生成数字印章,我遵循了不同指南的步骤,这些指南用不同的语言描述了您必须使用算法SHA-1
和RSA
.
在我的代码中,我什至实现了两个进程,一个使用库opensslkey
,一个使用本地 C# 库,两者都返回相同的结果。问题是验证者告诉我印章格式不正确或无效。
你知道为什么会这样吗?(按照我的代码)。
private string generaSello()
{
string strSello = string.Empty;
string strPathLlave = CFDI.Properties.Settings.Default.llave;
string strLlavePwd = CFDI.Properties.Settings.Default.clave;
string strCadenaOriginal = generaCadena(); // Aquí ya haber generado la cadena original
System.Security.SecureString passwordSeguro = new System.Security.SecureString();
passwordSeguro.Clear();
foreach (char c in strLlavePwd.ToCharArray())
passwordSeguro.AppendChar(c);
byte[] llavePrivadaBytes = System.IO.File.ReadAllBytes(strPathLlave);
RSACryptoServiceProvider rsa = opensslkey.DecodeEncryptedPrivateKeyInfo(llavePrivadaBytes, passwordSeguro);
SHA1Managed sha = new SHA1Managed();
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(generaCadena());
byte[] digest = sha.ComputeHash(bytes);
RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(rsa);
RSAFormatter.SetHashAlgorithm("SHA1");
byte[] SignedHashValue = RSAFormatter.CreateSignature(digest);
SHA1CryptoServiceProvider hasher = new SHA1CryptoServiceProvider();
byte[] bytesFirmados = rsa.SignData(System.Text.Encoding.UTF8.GetBytes(strCadenaOriginal), hasher);
strSello = Convert.ToBase64String(bytesFirmados); // Y aquí está el sello
string r = Convert.ToBase64String(SignedHashValue);// Y aquí está el sello 2
return strSello;
//return r;
}
这是形成的 XML 的示例:
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" version="3.2" folio="0" fecha="2017-04-18T18:19:17" sello="iMTGK5FHmLpudWYIxLP99/h44JMErjg1bNLtblp/YvVAVTPMiMlwEF9Y+44wHOVeQ2u36xnl1aVVCL9T8fyUQwFRCmd9PtFWdAmSQrpHK914gomk31W+Hunrdrwj0Asewyn/wl1fVaJbeV2R0cVsdvrWJXhx3YguJPmyvrE+u7U=" formaDePago="0" noCertificado="20001000000200001428" certificado="MIIEYTCCA0mgAwIBAgIUMjAwMDEwMDAwMDAyMDAwMDE0MjgwDQYJKoZIhvcNAQEFBQAwggFcMRowGAYDVQQDDBFBLkMuIDIgZGUgcHJ1ZWJhczEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMTQwMgYJKoZIhvcNAQkCDCVSZXNwb25zYWJsZTogQXJhY2VsaSBHYW5kYXJhIEJhdXRpc3RhMB4XDTEzMDUwNzE2MDEyOVoXDTE3MDUwNzE2MDEyOVowgdsxKTAnBgNVBAMTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFNDMSkwJwYDVQQpEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcGA1UEChMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxJTAjBgNVBC0THEFBQTAxMDEwMUFBQSAvIEhFR1Q3NjEwMDM0UzIxHjAcBgNVBAUTFSAvIEhFR1Q3NjEwMDNNREZOU1IwODERMA8GA1UECxMIcHJvZHVjdG8wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKS/beUVy6E3aODaNuLd2S3PXaQre0tGxmYTeUxa55x2t/7919ttgOpKF6hPF5KvlYh4ztqQqP4yEV+HjH7yy/2d/+e7t+J61jTrbdLqT3WD0+s5fCL6JOrF4hqy//EGdfvYftdGRNrZH+dAjWWml2S/hrN9aUxraS5qqO1b7btlAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBBQUAA4IBAQACPXAWZX2DuKiZVv35RS1WFKgT2ubUO9C+byfZapV6ZzYNOiA4KmpkqHU/bkZHqKjR+R59hoYhVdn+ClUIliZf2ChHh8s0a0vBRNJ3IHfA1akWdzocYZLXjz3m0Er31BY+uS3qWUtPsONGVDyZL6IUBBUlFoecQhP9AO39er8zIbeU2b0MMBJxCt4vbDKFvT9i3V0Puoo+kmmkf15D2rBGR+drd8H8Yg8TDGFKf2zKmRsgT7nIeou6WpfYp570WIvLJQY+fsMp334D05Up5ykYSAxUGa30RdUzA4rxN5hT+W9whWVGD88TD33Nw55uNRUcRO3ZUVHmdWRG+GjhlfsD" subTotal="1" TipoCambio="1.00" Moneda="Peso Mexicano" total="1" tipoDeComprobante="ingreso" metodoDePago="02,99" LugarExpedicion="Av. Cerro Gordo del Campestre 201 301, Las Quintas, 37125, León, León de los Aldama, Guanajuato, México" NumCtaPago="NO IDENTIFICADO">
<cfdi:Emisor rfc="DRD091113A70" nombre="DESARROLLOS RESIDENCIALES DE LEON SA DE CV">
<cfdi:DomicilioFiscal calle="Av. Cerro Gordo del Campestre" noExterior="201" noInterior="301" colonia="Las quintas" localidad="León de los Aldama" municipio="León" estado="Guanajuato" pais="México" codigoPostal="37125" />
<cfdi:RegimenFiscal Regimen="PERSONA MORAL REGIMEN GENERAL" />
</cfdi:Emisor>
<cfdi:Receptor rfc="AAHA6301152K1" nombre="ABRAHAM ARAIZA HERNANDEZ">
<cfdi:Domicilio calle="VIA AUREA" noExterior="440" colonia="VILLA MAGNA" municipio="SAN LUIS POTOSÍ" estado="SAN LUIS POTOSÍ" pais="MEXICO" codigoPostal="78413" />
</cfdi:Receptor>
<cfdi:Conceptos>
<cfdi:Concepto cantidad="1" unidad="NO APLICA" descripcion="VENTA DE TERRENO&#xA;LOTE 36 MZ 64 DE LA PRIVADA MAYORAZGO LA GAVIA DE CONFORMIDAD CON EL FIDEICOMISO DE BANCO DEL BAJIO NO. 10153-10-34 DE FECHA 24 DE ENERO DE 2011" valorUnitario="1" importe="1" />
</cfdi:Conceptos>
<cfdi:Impuestos />
</cfdi:Comprobante>
看,我建议您将您的字符串(您发送以生成印章的字符串)与验证器正在生成的字符串进行比较:
注意:您使用的是 3.2 版......显然我们已经在 3.3 版,我不知道您的详细信息是否在那里。这归结为结构错误,这将导致原始链的形成错误,从而导致密封错误。
细绳
||3.2|2017-04-18T18:19:17|收入|0|1|1.00|墨西哥比索|1|02.99|平均 Cerro Gordo del Campestre 201 301, Las Quintas, 37125, León, León de los Aldama, Guanajuato, Mexico|身份不明|DRD091113A70|LEON SA DE CV 的住宅开发|Av. Cerro Gordo del Campestre|201|301|Las quintas|León de los Aldama|León|Guanajuato|Mexico|37125|道德规范|AAHA6301152K1|ABRAHAM ARAIZA HERNANDEZ|VIA AUREA|440|VILLA MAGNA|圣路易斯波托西|圣路易斯POTOSÍ|墨西哥|78413|1|不适用|根据 BANCO DEL BAJIO TRUST NO. 出售私人 MAYORAZGO LA GAVIA 土地 36 MZ 64 10153-10-34 2011 年 1 月 24 日|1|1||
邮票
iMTGK5FHmLpudWYIxLP99/h44JMErjg1bNLtblp/YvVAVTPMiMlwEF9Y+44wHOVeQ2u36xnl1aVVCL9T8fyUQwFRCmd9PtF WdAmSQrpHK914gomk31W+Hunrdrwj0Asewyn/wl1fVaJvrYxbeV2vVr+
验证
其中一个错误表明作品集不正确:
cfdi:Proof:“FOLIO”属性的值无效,不符合SAT定义的结构,必须大于零。
另一个错误说:
该证书不属于文件的颁发者。
我认为这个验证很重要。