Bom dia! Estou desenvolvendo a procedura que gera os XML de transmissão e recepção dos retornos da NFSE Prefeitura de SP. Estou tendo dificuldade na geração da tag <Assinatura> do RPS que baseado na concatenação de vários dados do RPS deve ser criptografado conforme abaixo (Segundo Manual da Prefeitura):
1) Converta a cadeia de caracteres ASCII para bytes (Base64) Fiz no braço pois não achei uma function do Oracle que fizesse; String Base64: MzEwMDAwMDBMTExMTDAwMDAwMDAwMDAwMTIwMDcwMTIwVE5OMDAwMDAwMDAwMTAwMDAwMDAwMDAw MDAwMDEwMDAwMDI2NTgxMDAwMTg1NjQwNzE4NzgAA= 2) Gere o Hash (array de bytes) utilizando SHA1 Tentei usar o a function abaixo com sh1, md5 e rc4, não funcionou pois o retorno da function devolveu: 47F8CF03E5322A1B7F7BA13C919CD5C2 (Não lembro qual foi a que usei nesse caso (sh1, md5 ou rc4) 3) Gere o Hash (array de bytes) utilizando RSA-SHA1 Não segui adiante pois me complequei no ítem 2 Observação no Manual da Prefeitura: ATENÇÃO! Na maioria das linguagens de programação, os passos 3 e 4 são feitos através de uma única função. Verifique a documentação de sua linguagem para evitar assinar um hash de um hash. Pedido de Ajuda: Alguém do grupo já desenvolveu a NFSE Paulistana e pode me ajudar com a tag <Assinatura> do RPS, não é a tag de assinatura digital essa já consegui fazer. Obrigado pela atenção mais uma vez. Sérgio Pennacchiotti ---------------------------------------------------------------------------- ------------ create or replace function F_CRYPTO_SHA1( c_string in varchar2 ) return varchar2 is n_hash_function number; r_hash raw(128); begin n_hash_function := dbms_crypto.hash_sh1; -- n_hash_function := dbms_crypto.hash_md5; -- n_hash_function := dbms_crypto.hash_rc4; r_hash := dbms_crypto.hash( utl_raw.cast_to_ raw(c_string) ,n_hash_function ); return( r_hash ); exception when others then return( '' ); end F_CRYPTO_SHA1; ---------------------------------------------------------------------------- -------------