Publicidade

@gilsones

Assinar XML com C/C++ (Certificado A3)

Pessoal, é possível assinar digitalmente um documento XML com C/C++ ?

 

Preciso contratar alguém para fazer um componente/modulo para assinar a NFe, que será acessado por outro sistema, mas queria saber se é possível.

Tenho a opção do Java tbm, mas antes queria tentar um opção sem precisar instalar o Java no servidor.

 

Obrigado.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

  • Próximos Eventos

  • Conteúdo Similar

    • Por Bianaa
      Pessoal me ajudem com esse exercício:
      Codifique um programa que leia o preço de compra e o preço de venda de 10 produtos e informe quantos produtos proporcionam: • lucro inferior a 10% • lucro entre 10% e 20% • lucro acima de 20% O programa deve utilizar um procedimento com assinatura void le_precos(int precos[], int quantidade, char opcao[]) para leitura dos preços de compra e venda, utilizando a string opção para identificar o preço de venda ou compra. Uma função deve calcular o lucro de um produto, dados os seus preços como parâmetro.
    • Por DarkNuub
      Olá pessoal, olhando alguns tópicos  aki no forum mesmo eu fiz esse código porem n ta rodando direito, n sei se o problema esta no meu código ou se est no meu banco de dados
      <?php $conn = mysqli_connect('localhost','root','') or die ('Erro ao conectar'); $db = mysqli_select_db($conn,'teste') or die ('Erro ao conectar com o banco de dados'); $query = mysqli_query($conn,"SELECT * FROM sopraelas ORDER BY id"); while( $row = mysqli_fetch_object( $query ) ) $Write [ ] = $row ; $Writer = new XMLWriter(); $Writer->openMemory(); $Writer->startDocument( '1.0' , 'utf-8' ) ; $Writer->setIndent(true); $Writer->startElement( 'Rss' ) ; forEach ( $Write as $Nodes ) { $Writer->startElement( 'Feed' ) ; if ( is_array ( $Nodes ) ) forEach ( $Nodes as $nodeName => $nodeValue ) $Writer->writeElement ( $nodeName , $nodeValue ) ; $Writer->endElement(); } $Writer->endElement(); $Output = $Writer->outputMemory ( true ) ; $fHandle = fopen ( 'backup.xml' , 'w+' ) ; fwrite ( $fHandle , $Output ) ; fclose ( $fHandle ) ; header ( 'Content-Type: text/xml;charset=utf-8' ) ; echo $Output; ?> a questão e q esta dando o seguinte erro:
       
      no meu banco de dados a estrutura é a seguinte:
      n sei se errei na estrutura,no código ou nos dois.
    • Por arthurdr
      Estou fazendo um programa, mas estou trancado em uma parte. O ojetivo desta parte do programa é ver se as letras em que o usuário digita, são iguais as permitidas. Procurei algumas maneiras de fazer isso, mas só achei essa. O problema deste programa é que quando ele vai analisar a cadeia t, ele sempre mostra que a cadeia é invalida, mesmo estando dentro do exigido, abrindo melhor a cadeia t, descobri que o programa sempre diz que a 18º letra é invalida, mas não consegui descobrir o motivo, mesmo ponto letras validas, a 18º ele mostra que é errada.
      A parte do programa é essa:
       
      #include <stdio.h> #include <stdlib.h> #include <string.h> main() {     int M, N, i, j, a, b;     char p[M], t[N];     int letrasT, letraT, letrasP, letraP;          M=5;     N=25; do {     do     {         i=0;         letraP=0;         letrasP=0;         printf ("\n    Digite a cadeia p: ");         scanf ("%s", p);         if (M!=strlen(p))             printf ("\n\n        !!!TAMANHO DE p INVALIDO!!!\n");         for (i=0; i<M; i++)             if ((p!='A') && (p!='C') && (p!='G') && (p!='T'))                 letrasP=1;             else                 letrasP=0;         for (i=0; i<M; i++)             if (letrasP==1)                 letraP=1;         if (letraP==1)             printf ("\n\n        !!!CADEIA DE p INVALIDA!!!\n");     }while (letraP==1); }while (M<strlen(p));      do {     do     {         i=0;         letraT=0;         letrasT=0;         printf ("\n    Digite a cadeia t: ");         scanf ("%s", t);         if (N!=strlen(t))             printf ("\n\n        !!!TAMANHO DE t INVALIDO!!!\n");         for (i=0; i<N; i++)             if ((t!='A') && (t!='C') && (t!='G') && (t!='T'))                 letrasT=1;             else                 letrasT=0;         for (i=0; i<N; i++)             if (letrasT==1)             printf ("*%i", letrasT);                 letraT=1;         if (letraT==1)             printf ("\n\n        !!!CADEIA DE t INVALIDA!!!\n");     }while (letraT==1); }while (N<strlen(t));      printf ("\n%s", p); printf ("\n%s", t); }
    • Por Guilherme Paiva
      #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <locale.h> #include <string.h> struct bebidas { char tipo1[50]; char tipo2[50]; char tipo3[50]; char tipo4[50]; float teor1,teor2,teor3,teor4; float valor_bebida1, valor_bebida2, valor_bebida3, valor_bebida4; float tt_bebidas; int cod; } logb[100]; struct evento { int quant_meia,quant_norm,quant_vip; int dia,mes,ano; int vazio,cod; int cont[100]; char nome [30]; char local[30]; int quantidade; float lucro; float valor; float valor_ingres; int open,vend; struct bebidas logb; } logE[100]; int verifica_pos(void); int verifica_cod( int cod ); int opt; void cadastroP(int cod,int pos); void list(); void math(); void cadastrobebida(); void cadastroingress(); void consultaCod (void); void excluirevento (void); int main(void) //INICIO DO MAIN { setlocale(LC_ALL,"portuguese"); int i,Opcao,Opevento,posicao,retorno,ingress; int codaux; do { printf("===================================\n"); printf("1 - Cadastrar Evento\n"); printf("2 - Pesquisar Evento \n"); printf("3 - Ingressos Vendidos \n"); printf("4 - Exibir Resultado Por Evento \n"); printf("5 - Exibir Resultado Geral\n"); printf("6 - Sair \n"); printf("===================================\n"); printf("Digite a Opção desejada\n"); scanf("%d",&Opcao); getchar(); if (Opcao == 1) { printf("Voce selecionou a opcao 1 - Cadastrar Novo Evento\n"); posicao=verifica_pos(); if ( posicao != -1 ) { printf("\nEntre com um codigo de 1 a 50 se for evento open bar: \n"); printf("\nEntre com um codigo de 51 a 100 Se for evento normal: \n"); scanf("%d",&codaux); fflush(stdin); retorno = verifica_cod( codaux ); if ( retorno == 1 ) cadastroP( codaux, posicao ); else { printf("\nCodigo ja existente ou invalido pressione enter para voltar ao menu principal\n"); getchar(); system("cls"); main(); } } else printf("\nNao e possivel realizar mais cadastros!\n"); break; } else if (Opcao == 2) { system("cls"); do { printf("\t\t\t Voce selecionou a opcao 2 - Pesquisar eventos \t\t\t\n\n"); printf("1 - Pesquisar Evento por codigo\n"); printf("2 - Listar todos os Eventos\n"); printf("3 - Cadastrar bebidas evento\n"); printf("4 - Excluir Evento\n"); printf("5 - Voltar ao menu principal\n"); printf("Selecione uma opcao por favor: "); scanf("%d", &Opevento); getchar(); if(Opevento == 1) { consultaCod(); } else if(Opevento == 2) { list(); } else if (Opevento == 3) { printf("Voce selecionou a opcao 3 - Cadastrar Bebidas\n"); cadastrobebida(); } else if (Opevento == 4) { printf("Voce selecionou a opcao 4 - Excluir Evento\n"); excluirevento(); } else if(Opevento == 5) { printf("Voce selecionou voltar ao menu principal, pressione ENTER para continuar"); getchar(); system("cls"); } else printf("Opcao Invalida\n\n"); } while(Opevento =!5 || Opevento > 5 || Opevento < 0 || Opevento == 0); } else if(Opcao == 3) { printf("\t\t\t Voce selecionou a opcao 3 - Ingressos vendidos \t\t\t\n\n"); cadastroingress(); } else if(Opcao == 4) { printf("\t\t\t Voce selecionou a opcao 4 - Resultado por evento \t\t\t\n\n"); math(); } else if (Opcao == 6) { printf("Voce selecionou a opcao 6 - Sair\n"); printf("Deseja Realmente sair aperte enter!!\n\n"); } else { printf("Opcao invalida, favor pressione enter para voltar ao menu principal"); getchar(); system("cls"); } } while (Opcao != 6 || Opcao < 6); } // FIM DO MAIN void math()//Valor ingresso { system("cls"); int i; int Option; char nomeCad[200]; do { printf("\nDigite o nome do evento como esta no cadastro: "); gets(nomeCad); for(i=0; i<100; i++) { if(strcmp(logE[i].nome, nomeCad)==0) { logE[i].valor_ingres = logE[i].valor / logE[i].quantidade; logE[i].vend = logE[i].valor_ingres * logE[i].quant_norm; logE[i].lucro = logE[i].open - logE[i].valor; i++; } } }while(Option == 1); system("cls"); } void cadastroP(int cod, int pos) //Cadastro das pessoas { int i; do { pos = verifica_pos(); logE[pos].cod = cod; printf("\t\t\t================================\t\t\t\n",200,187); printf("\t\t\t | Cadastro Evento | \t\t\t\n "); printf("\t\t\t================================\t\t\t\n",200,187); printf("Digite o Nome do evento \n"); fflush(stdin); gets(logE[pos].nome); printf("Digite o local do evento\n"); fflush(stdin); gets(logE[pos].local); printf("Quantidade de ingresso\n"); fflush(stdin); scanf("%d", &logE[pos].quantidade); printf("Custo total do Evento\n"); fflush(stdin); scanf("%f", &logE[pos].valor); printf("Data do Evento em modo(dd/mm/aaaa)\n"); printf("Data de Realizaçao \n"); fflush(stdin); scanf("%d",&logE[pos].dia); scanf("%i",&logE[pos].mes); scanf("%i",&logE[pos].ano); logE[pos].vazio = 1; printf("\nDigite 1 para efetuar novo cadastro ou qualquer outra tecla para volar ao menu principal"); scanf("%d", &opt); //opt ==1; //getchar(); } while(opt==1); system("cls"); main(); } // FIM DO CADASTRO DE PESSOAS void cadastrobebida() //Cadastro de bebidas { system("cls"); int i; int Option; char nomeCad[200]; do { printf("\nDigite o nome do evento como esta no cadastro: "); gets(nomeCad); for(i=0; i<100; i++) { if(strcmp(logE[i].nome, nomeCad)==0) { printf("\t\t\t================================\t\t\t\n",200,187); printf("\t\t\t | Cadastro bebidas | \t\t\t\n "); printf("\t\t\t================================\t\t\t\n",200,187); printf("Entre com o primeiro tipo de de bebida\n "); fflush(stdin); gets(logb[i].tipo1); printf("Teor Alcolico da bebida"); fflush(stdin); scanf("%f",&logb[i].teor1); printf("Entre com o Valor da Bebida:\n "); fflush(stdin); scanf("%f",&logb[i].valor_bebida1); printf("Entre com o segundo tipo de bebida\n "); fflush(stdin); gets(logb[i].tipo2); printf("Teor Alcolico da bebida"); fflush(stdin); scanf("%f",&logb[i].teor2); printf("Entre com o Valor da Bebida:\n "); fflush(stdin); scanf("%f",&logb[i].valor_bebida2); printf("entre com o terceiro tipo de bebida\n "); fflush(stdin); gets(logb[i].tipo3); printf("Teor Alcolico da bebida"); fflush(stdin); scanf("%f",&logb[i].teor3); printf("Entre com o Valor da Bebida:\n "); fflush(stdin); scanf("%f",&logb[i].valor_bebida3); printf("entre com o quarto tipo de bebida\n "); fflush(stdin); gets(logb[i].tipo4); printf("Teor Alcolico da bebida"); fflush(stdin); scanf("%f",&logb[i].teor4); printf("Entre com o Valor da Bebida:\n "); fflush(stdin); scanf("%f",logb[i].valor_bebida4); printf("\nPressione 1 para continuar cadastrando ou 2 para voltar ao menu principal: "); scanf("%d", &Option); i++; } } } while(Option == 1); system("cls"); } // FIM DO CADASTRO DE BEBIDAS. void cadastroingress() //Cadastro dos ingressos { system("cls"); int i; int Option; char nomeCad[200]; do { printf("\nDigite o nome do evento como esta no cadastro: "); gets(nomeCad); for(i=0; i<100; i++) { if(strcmp(logE[i].nome, nomeCad)==0) { printf("\t\t\t================================\t\t\t\n",200,187); printf("\t\t\t | Ingressos Vendidos | \t\t\t\n "); printf("\t\t\t================================\t\t\t\n",200,187); printf("Entre Com A Quantidade de Ingressos open bar \n "); fflush(stdin); scanf("%2d",logE[i].quant_vip); printf("Entre Com A Quantidade de Ingressos normal\n"); fflush(stdin); scanf("%d",logE[i].quant_norm); printf("Entre Com A Quantidade de Ingressos Meia\n "); fflush(stdin); scanf("%d",logE[i].quant_meia); printf("\nPressione 1 para continuar cadastrando ou 2 para voltar ao menu principal: "); scanf("%d", &Option); i++; } } } while(Option == 1); system("cls"); } // FIM DO CADASTRO DE INGRESSOS. void list() // Lista os usuarios cadastrados. { int i,j; for(i=0; i<100; i++) { if(logE[i].cod!=NULL) { printf("\nCodigo: %d \nNome: %s\nlocal: %s\ndata: %d/%i/%i\n\n", logE[i].cod,logE[i].nome,logE[i].local,logE[i].dia,logE[i].mes,logE[i].ano); } } printf("Nenhum codigo cadastrado!!\n"); printf("Pressione enter para volta ao menu principal"); getchar(); system("cls"); } //FIM DO LIST int verifica_pos( void ) //VERIFICADOR DA POSIÇÃO { int cont = 0; while ( cont <= 100 ) { if ( logE[cont].vazio == 0 ) return(cont); cont++; } return(-1); } // FIM DO VERIFICADOR int verifica_cod( int cod ) // VERIFICADOR DE CÓDIGO { int cont = 0; while ( cont <= 100 ) { if ( logE[cont].cod == cod ) return(0); cont++; } return(1); } // FIM DO VERIFICADOR void consultaCod (void) // CONSULTAR 1 CADASTRADO QUALQUER VIA CÓDIGO DADO POR USUÁRIO. { int cont = 0, cod; printf("\nEntre com o codigo\n"); scanf("%d",&cod); fflush(stdin); system("cls"); while ( cont <= 100 ) { if (logE[cont].cod==cod) { if (logE[cont].vazio==1) { if (cont<=50) { printf("Evento open Bar\n"); printf("\nCodigo: %d \nNome: %s\nLocal: %s\nData: %d/%i/%i\n\n", logE[cont].cod,logE[cont].nome,logE[cont].local,logE[cont].dia,logE[cont].mes,logE[cont].ano); system ("pause"); }else if(cont>50) { printf("Evento normal"); printf("\nCodigo: %d \nNome: %s\nLocal: %s\nData: %d/%d/%d\n\n", logE[cont].cod,logE[cont].nome,logE[cont].local,logE[cont].dia,logE[cont].mes,logE[cont].ano); system ("pause"); } system("cls"); break; } } cont++; if ( cont > 100 ) { printf("\nCodigo nao encontrado, pressione enter para volar ao menu principal\n"); getchar(); system("cls"); } } } // FIM DA FUNÇÃO CONSULTAR void excluirevento(void) // EXCLUI CLIENTE { int cod, cont = 0; char resp; printf("\nEntre com o codigo do registro que deseja excluir: \n"); scanf("%d", &cod ); while ( cont <= 100 ) { if ( logE[cont].cod == cod ) { if (logE[cont].vazio == 1 ) { printf("\nCodigo: %d \n nome: %c \n data: %d//%d//%d \n local: %c \n",logE[cont].cod,logE[cont].nome,logE[cont].dia,logE[cont].mes,logE[cont].ano,logE[cont].local); getchar(); printf("\nDeseja realmente excluir? s/n: "); scanf("%s",&resp); if ( ( resp == 'S' ) || ( resp == 's' ) ) { logE[cont].vazio=0; logE[cont].cod = NULL; printf("\nExclusao feita com sucesso\n"); break; } else { if ( ( resp == 'N' ) || ( resp == 'n' ) ) { printf("Exclusao cancelada!\n"); break; } } } } cont++; if ( cont > 100 ) printf("\nCodigo nao encontrado\n"); } system("pause"); system("cls"); } Um promoter  deseja controlar todos os eventos dos quais participa e você foi
      contratado para resolver esse problema.
      Assim que começou o trabalho, você ficou sabendo que o cadastro de um evento necessita de:
      identificador único (um código inteiro), nome, local, data da realização, quantidade de ingressos
      colocados à venda, custos de organização e valor da entrada.
      Foi-lhe informado também que existem sempre três valores de entrada: o 1o valor, para as entradas do
      tipo popular; o 2o valor, para as entradas do tipo normal e o 3o valor para as entradas do tipo especial.
      Alguns desses eventos são festas open bar, possuindo assim, além de todas as informações anteriores,
      uma relação das quatro bebidas que serão servidas. As informações das bebidas, por sua vez, são nome,
      teor alcóolico e valor unitário.
      O valor das entradas populares é calculado automaticamente, da seguinte forma:
       eventos open bar: R$ 60,00 mais 50% do valor unitário de cada bebida que será servida;
       demais eventos: custo de organização dividido pela quantidade de ingressos colocados à venda.
      O valor da entrada normal é o valor da entrada popular mais 10% desse mesmo valor. Já o valor da
      entrada especial é o valor da entrada normal mais 15% desse mesmo valor.
      Você deverá implementar um sistema que cadastre os eventos desse promoter. O cadastro dos eventos
      deverá ser finalizado quando for inserido 0 (zero) para o identificador único.
      O sistema deverá funcionar com o seguinte menu de opções:
      1 – Cadastrar evento
      2 – Pesquisar evento
      3 – Ingressos vendidos
      4 – Exibir resultado por evento
      5 – Exibir resultado geral
      6 – Sair
      Instituto Federal do Triângulo Mineiro - Campus Paracatu
      Tecnólogo em Análise e Desenvolvimento de Sistemas
      Trabalho de Conclusão da Disciplina
      Disciplina: Algoritmos Turma: ADS1
      Professor: Gustavo Alexandre de Oliveira Silva
      Aluno (a):
      Data: Valor: 16,0 pts Resultado:
      A opção 1 cadastra os dados de cada evento: identificador único, nome, local, data da realização,
      quantidade de ingressos colocados à venda, custos de organização e valor da entrada.
      A opção 2 pesquisa os dados de cada evento, através do seu identificador único e exibe todos os dados
      na tela.
      A opção 3 pesquisa os dados de cada evento, através do seu identificador único e insere a quantidade de
      ingressos (popular, normal ou especial) que foram vendidos para o respectivo evento. Feito isso, o
      sistema deverá calcular se o respectivo evento teve lucro ou prejuízo.
      A opção 4 exibe o resultado (lucro ou prejuízo) de um dado evento, informado pelo usuário através do
      seu identificar único.
      A opção 5 exibe o saldo atual do promoter, levando em consideração todos os eventos já realizados.
      A opção 6 encerra o programa.