Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Liraaah

C função multiplicar, na criptografia na linguagem C

Recommended Posts

To aprendendo ainda a programar, e meu professor pediu uma criptografia, consegui até rodar o pograma, mais ele disse: que tenho que usar a função de multiplicar, gostaria de uma ajuda...

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char senha[7];
    char letras[41];
    char frase[41];
    char resultado[41];
    char a;
    int i, cont = 0, tam = 0;

    printf("Digite a Senha: ");
    while (cont <= 5){
        senha[cont] = getchar();
         if(senha[cont] == 0x0A){
              break;
           }
           cont ++;
   }
setbuf(stdin, NULL);
    //scanf("%6s",senha);
    //strcpy(senha, lersenha());


   for (i=0; i<6; i++)
   {
     printf("Valor do elemento %c da string = %d\n",i, senha);
   }

    while(cont < 40){
        for(a='a';a <='z';a++){
            letras[cont] = a;
            cont++;
            if (cont == 39)
                a == 'z';
        }
    }
    printf("\n\nMostrando Alfabeto minusculo\n");
    for (i = 0; i < 40; i++)
        printf("%c",letras);
    printf("\n\n");

    printf("Digite a frase: ");
    scanf("%40s",frase);

    for (i=0; i<strlen(frase); i++)
   {
      printf("Valor do elemento %c da string = %d\n",i, frase);
   }


    return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Liraaah Seu professor informou o calculo a ser usado na função de multiplicar?

Se ele não passou nenhum, acredito que você precisa usar a senha, alfabeto e a frase para gerar uma frase criptografada.

Contanto que seja possível descriptografar usando a mesma frase criptografada e a senha.

Tente trabalhar com uma função que ja retorne a frase criptografada, tal qual também pode ser usado para multiplica, ex.:

const char *cript_mult(char *frase, char *senha, char *alfabeto){
...
}

Observando seu código, acredito que você precisa usar os valores inteiros do char para multiplicar por um valor padrão, ex.:

 

Define:

#define div 128

 

Senha:

abc   = equivale a 97, 98, 99.

 

Frase:

joao    =  equivale a 106, 111, 97, 111.

 

Multiplicado: 

CÁLCULO        =    CÁLCULO      =  R  = ASCII

(97*106) / div =   10.282 / 128 = 80 = P

(98*111) / div =   10.878 / 128 = 85 = U

(99*97)   / div =     9.603  / 128 = 75 = K

(97*111) / div =   10.767 / 128 = 84 = T      < Observe que a senha é menor, então volte ao inicio da senha

 

Frase criptografada: PUKT

 

 

Para descriptografar basta multiplicar o valor ascii de P,U,K,T pela senha dada como entrada, porém é importante lembrar que é preciso melhorar o cálculo para obter o código ascii correto. SEMPRE USE DOUBLE ou FLOAT, menos quando for para receber o resultado ascii da frase criptografada. Use tolower para manter todas letras pequenas.

 

P.S: Se for usar z, o cálculo ainda funcionará.

 

Talvez depois eu posto um exemplo melhor.

 

Segue seu código corrigido:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char senha[7];
    char letras[41];
    char frase[41];
    char resultado[41];
    char a;
    int i, cont = 0, tam = 0;

    printf("Digite a Senha: ");
    while (cont <= 5){
        senha[cont] = getchar();
         if(senha[cont] == 0x0A){
              senha[cont]='\0';
              break;
           }
           cont ++;
    }

    setbuf(stdin, NULL);
    for (i=0; i<cont; i++)
    {
        printf("Valor do elemento %c da string = %d\n", senha[i], senha[i]);
    }
        int contl = 0;
    for(a='a';a <='z';a++){
    letras[contl] = a;
            contl++;
            a == 'z';
    }
    printf("\n\nMostrando Alfabeto minusculo\n");
    for (i = 0; i < contl; i++) printf("%c",letras[i]);
    printf("\n\n");

    printf("Digite a frase: ");
    scanf("%40s",frase);
    for (i=0; i<strlen(frase); i++){
      printf("Valor do elemento %c da string = %d\n",frase[i], frase[i]);
    }

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • TYsquare

    17 minutos atrás, TYSQUARE89 disse:

    @Liraaah Seu professor informou o calculo a ser usado na função de multiplicar?

    Se ele não passou nenhum, acredito que você precisa usar a senha, alfabeto e a frase para gerar uma frase criptografada.

    Contanto que seja possível descriptografar usando a mesma frase criptografada e a senha.

    Tente trabalhar com uma função que ja retorne a frase criptografada, tal qual também pode ser usado para multiplica, ex.:

    
    const char *cript_mult(char *frase, char *senha, char *alfabeto){
    ...
    }

    Observando seu código, acredito que você precisa usar os valores inteiros do char para multiplicar por um valor padrão, ex.:

     

    Define:

    #define div 128

     

    Senha:

    abc   = equivale a 97, 98, 99.

     

    Frase:

    joao    =  equivale a 106, 111, 97, 111.

     

    Multiplicado: 

    CÁLCULO        =    CÁLCULO      =  R  = ASCII

    (97*106) / div =   10.282 / 128 = 80 = P

    (98*111) / div =   10.878 / 128 = 85 = U

    (99*97)   / div =     9.603  / 128 = 75 = K

    (97*111) / div =   10.767 / 128 = 84 = T      < Observe que a senha é menor, então volte ao inicio da senha

     

    Frase criptografada: PUKT

     

     

    Para descriptografar basta multiplicar o valor ascii de P,U,K,T pela senha dada como entrada, porém é importante lembrar que é preciso melhorar o cálculo para obter o código ascii correto. SEMPRE USE DOUBLE ou FLOAT, menos quando for para receber o resultado ascii da frase criptografada. Use tolower para manter todas letras pequenas.

     

    P.S: Se for usar z, o cálculo ainda funcionará.

     

    Talvez depois eu posto um exemplo melhor.

     

    Segue seu código corrigido:

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char senha[7];
        char letras[41];
        char frase[41];
        char resultado[41];
        char a;
        int i, cont = 0, tam = 0;
    
        printf("Digite a Senha: ");
        while (cont <= 5){
            senha[cont] = getchar();
             if(senha[cont] == 0x0A){
                  senha[cont]='\0';
                  break;
               }
               cont ++;
        }
    
        setbuf(stdin, NULL);
        for (i=0; i<cont; i++)
        {
            printf("Valor do elemento %c da string = %d\n", senha[i], senha[i]);
        }
            int contl = 0;
        for(a='a';a <='z';a++){
        letras[contl] = a;
                contl++;
                a == 'z';
        }
        printf("\n\nMostrando Alfabeto minusculo\n");
        for (i = 0; i < contl; i++) printf("%c",letras[i]);
        printf("\n\n");
    
        printf("Digite a frase: ");
        scanf("%40s",frase);
        for (i=0; i<strlen(frase); i++){
          printf("Valor do elemento %c da string = %d\n",frase[i], frase[i]);
        }
    
        return 0;
    }

     

    obrigado pela ajuda parceiro, tinha que dar os números misturados com letras apenas isso

    adicionado 5 minutos depois
    4 minutos atrás, Liraaah disse:

    TYsquare

    obrigado pela ajuda parceiro, tinha que dar os números misturados com letras apenas isso

    ele deu esse código, mandou implementar no codigo

    #include <stdio.h>

    #include <stdlib.h>

     

    int main()

    {

        char letra;

        printf("Texto para Inteiro\n\n");

        printf("Entre a letra: \n");

        scanf("%c", &letra);

        printf("Letra: %c\nValor: %d\n", letra, letra);

        return 0;

    }

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×