Assinar Rps - NFe

2 respostas
cs.santos0

Iai pessual, blz?

estou com bastante duvidas a respeito da assinatura de um RPS em um projeto de NF-e. Eu ja assinei o documento, porem falta assinar cada um dos RPS na tag .

Eu gerei a String com todos os dados a ser assinados como nos passos da documentação do Nf-e:

1º - Monte a string de caracteres conforme a tabela a apresentada anteriormente. 2º - Converta a cadeia de caracteres ASCII para bytes. 3º - Gere o HASH (array de bytes) utilizando SHA1. 4º - Assine o HASH (array de bytes) utilizando RSA-SHA1.

ou seja, o passo 1 esta feito. Porem eu não sei como prosseguir para assinar a rps na tag Assinatura. Estou usando um certificado digital do tipo .p12

Se alguem puder me ajudar eu agradeço

2 Respostas

cs.santos0

alguem ai por favor?..

vlw

cs.santos0

iai pessual, pesquisando por ai, eu vi um jeito e tentei adaptar para a minha necessidade, porem esta complicado fazer funcionar, fiz o método:

public static String assinar(String certificado, String senha, byte[] textoParaAssinar) throws Exception {
        {
            //FileInputStream fis = new FileInputStream(NfeUtil.generatePathToSecurity(path));
            FileInputStream fis = null;

            File file = new File("build\\web\\certificados");
            String path = file.getAbsolutePath() + "\\" + certificado;
            KeyStore ks = KeyStore.getInstance("PKCS12");
            fis = new FileInputStream(path);
            ks.load(fis, senha.toCharArray());
            Enumeration aliasesEnum = ks.aliases();

            String alias = "";
            while (aliasesEnum.hasMoreElements()) {
                alias = (String) aliasesEnum.nextElement();
                if (ks.isKeyEntry(alias)) {
                    break;
                }
            }

            KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias,
                    new KeyStore.PasswordProtection(senha.toCharArray()));

            PrivateKey p = keyEntry.getPrivateKey();
            
            Signature signer = Signature.getInstance("SHA1withRSA");
            signer.initSign(p);
            signer.update(textoParaAssinar);
            byte[] dadosAssinador = signer.sign();
            String res = new String(dadosAssinador);
            return res;
        }

esse método ira pegar a String a ser assinada e assinar de acordo com o certificado digital (PKCS12)...

ele até funciona, porem a saida é:

¶¸£Â ?Àj¥¿MÚHw¦%õ3ù_¢ã?¤¤x¡hºÛ?ôJ?&:ã^÷j|6P×O?HíZ?×ë_ÇMI	?7?ê}ÔªÑåø4Fh?»>¾?Þ®<?IâÏ#.é

esse monte de simbolos, e na hora de incluir no xml da erro pq não é possivel inserir esses caracteres nele.

Alguem ai sabe oq esta errado, se estou no caminho certo....ou qualquer coisa?..rsr

vlw

Criado 7 de novembro de 2008
Ultima resposta 10 de nov. de 2008
Respostas 2
Participantes 1