java中XML签名中的DigestValue与PHP不同

时间:2014-11-02 11:29:51

标签: php digital-signature xml-dsig

这是在java中计算的摘要值

SF4D6+PX7VB2hDbnb59a4WrWMOk=

这是我用

计算的摘要值
    $nodoDocumento = $doc3
        ->getElementsByTagName('factura')
        ->item(0);
    $content = $nodoDocumento->C14N(FALSE, TRUE);
    // OR
    $content = $nodoDocumento->C14N(TRUE, TRUE);
    $actualDigest = base64_encode(hash('SHA1', $content, false));

给了我

NDg1ZTAzZWJlM2Q3ZWQ1MDc2ODQzNmU3NmY5ZjVhZTE2YWQ2MzBlOQ==

这是我的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<factura id="comprobante" version="1.0.0">
<infoTributaria>
    <ambiente>1</ambiente>
    <tipoEmision>1</tipoEmision>
    <razonSocial>Carrillo Serrano Juan Roberto</razonSocial>
    <nombreComercial>Carrillos Team</nombreComercial>
    <ruc>1703644805001</ruc>
    <claveAcceso>2710201401170364480500110010010000000011234567812</claveAcceso>
    <codDoc>01</codDoc>
    <estab>001</estab>
    <ptoEmi>001</ptoEmi>
    <secuencial>000000001</secuencial>
    <dirMatriz>La Condamine N16-37 y Solano </dirMatriz>
</infoTributaria>
<infoFactura>
    <fechaEmision>27/10/2014</fechaEmision>
    <dirEstablecimiento>La Condamine N16-37 y Solano</dirEstablecimiento>
    <obligadoContabilidad>NO</obligadoContabilidad>
    <tipoIdentificacionComprador>04</tipoIdentificacionComprador>
    <razonSocialComprador>SALGRAF CIA. LTDA</razonSocialComprador>
    <identificacionComprador>1792067464001</identificacionComprador>
    <totalSinImpuestos>3500.00</totalSinImpuestos>
    <totalDescuento>0.00</totalDescuento>
    <totalConImpuestos>
        <totalImpuesto>
            <codigo>2</codigo>
            <codigoPorcentaje>2</codigoPorcentaje>
            <baseImponible>3500.00</baseImponible>
            <valor>420.00</valor>
        </totalImpuesto>
    </totalConImpuestos>
    <propina>0.00</propina>
    <importeTotal>3920.00</importeTotal>
    <moneda>DOLAR</moneda>
</infoFactura>
<detalles>
    <detalle>
        <codigoPrincipal>001</codigoPrincipal>
        <descripcion>DESARROLLO DE SOFTWARE</descripcion>
        <cantidad>1</cantidad>
        <precioUnitario>3500</precioUnitario>
        <descuento>0</descuento>
        <precioTotalSinImpuesto>3500.00</precioTotalSinImpuesto>
        <impuestos>
            <impuesto>
                <codigo>2</codigo>
                <codigoPorcentaje>2</codigoPorcentaje>
                <tarifa>12.00</tarifa>
                <baseImponible>3500.00</baseImponible>
                <valor>420.00</valor>
            </impuesto>
        </impuestos>
    </detalle>
</detalles>
<infoAdicional>
    <campoAdicional nombre="Dirección">Los Eucaliptos E1-374 y Av. 10 de Agosto    
    </campoAdicional>
    <campoAdicional nombre="Teléfono">2471233 ext. 101</campoAdicional>
    <campoAdicional nombre="Email">contador@calcograf.com</campoAdicional>
</infoAdicional>
</factura>`

1 个答案:

答案 0 :(得分:1)

尝试

$actualDigest = base64_encode(hash('SHA1', $content, true));

第三个参数$raw_output控制返回值是原始二进制值还是小写字符串的字符串。如果需要base64编码的SHA1,则需要对原始二进制值进行base64编码,而不是该二进制值的十六进制表示。