Ir ao conteúdo
  • Cadastre-se

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


Liraaah

Posts recomendados

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;
}
 

Link para o comentário
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;
}

 

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...