Ir ao conteúdo

Posts recomendados

Postado

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

Postado

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

 

Postado

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

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...