• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ddxtreme

[Ajuda] Como fazer um programa de calculos xor + gerador de caracteres(chaves)

5 mensagens neste tópico

Bem é assim eu gostaria de saber porque nao sou entendido neste assunto como posso criar um programa que efectue o calculo xor e que numa outra função, gere chaves com determinados requesitos a ser designados pelo utilizador...bem vou dar um exemplo

o programa seria mais ou menos assim:

Introduza os dados 1--aqui metia uma chave

Introduza os dados 2--aqui metia a segunda chave

depois

A sua chave xor é:--aqui aparecia o resultado da operaçao xor

numa outra funçao:

introduxa os requisitos da geraçao de chaves:--aqui o utilizador especificava com que caracteres queria que as chaves fossesm geradas exemplo: "(A-D),(1-9)" ou seja, queria que as chaves fossem geradas so com estes intervalos de caracteres

introduza o nº de chaves a gerar: aqui o utilizador especifica quantas chaves queria que o programa gerasse com os requesitos acima estabelecidos

depois, com estes requesitos e quantidade, o programa iria gerar as chaves e ao mesmo tempo guarda-la num documento txt

será queme fiz entender?

acho que seria um pouco trabalhoso este programa mas se alguem quissese me ajudar agradecia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ponto numero um: tenta escrever com menos 'k' e 'x', o teu texto fica muitissimo mais compreensivel. Assim até dá nojo ler e tira a vontade de ajudar.

Ponto numero dois: podias explicar melhor o que é que o teu programa é suposto fazer? Não percebi muito bem, essa história das chaves... e como é que é suposto fazer o xor? caracter a caracter?

Ponto numero três: em que linguagem estás a programar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estou a usar a linguagem c; depois o programa tal como disse iria efectuar calculos xor com a introduçao de 2 valores a ser introduzidos pelo utilizador, tal como a calculadora do windows faz

exemplo de um calculo xor: 12CBA25456CCC666 xor 26354BCDEB01BB22= 34FEE999BDCD7D44

depois na outra funçao doprograma, ele iria gerar valores com os requesitos que o utilizador quissese exemplo:

(A,C),(1-8), o programa iria gerar valores que so contivesse caracteres deste intervalo, valores estes de 16bytes (como os de cima)

e ao gerar iria guarda-los num documento txt

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, já percebi, queres um xor bit a bit.

Existe um operador que faz o xor bit a bit e que é o acento circunflexo (^)

#include <stdio.h>
#include <inttypes.h>

main(){

uint64_t a = 0x12CBA25456CCC666 ^ 0x26354BCDEB01BB22; 

/* Tens de usar 0x antes do numero para indicar que se trata de um numero hexadecimal. */

printf("%016" PRIx64 "\n", a);
}

Se executares isto o resultado é 34FEE999BDCD7D44.

Quanto a gerar as chaves, é um bocado mais complicada e por isso não vou fazer o código.

Mas para simplificar o programa podes gerar as "chaves", como tu lhe chamas, para uma string, e gerá-las caracter a caracter.

Ora não sei se sabes mas o C guarda os valores das variáveis do tipo char com o seu valor ASCII, por exemplo se fizeres int a = 65 e char b = 'A' podes usar a == b e esta operação é válida e verdadeira, porque o valor do caracter 'A' em ascii é 65.

Assim sendo podes muito facilmente criar um char array com o numero de caracteres utilizaveis (no exemplo que deste seriam 11 - A, B, C, 1, 2, 3, 4, 5, 6, 7 e 8 ) e em que cada posição do array é um dos caracteres.

Depois podes criar todas as combinacoes de 16 elementos usando os numeros de 0 a <número de caracteres utilizaveis - 1> ou seja, neste caso seria de 0 a 10. Esta operação é mais simples do que gerar directamente os caracteres, mas mesmo assim ainda não é assim muito fácil, é mesmo a parte mais difícil do teu programa.

Por fim imprimes as chaves, usando os numeros que foram gerados como indices no array de caracteres utilizaveis (ou seja, usando a combinação 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 sairia a chave AAAAAAAAAAAAABC1), para dentro de um ficheiro.

Só uma pequena nota: as "chaves" têm 8 bytes, e não 16, isto porque F (hexadecimal) = 1111 (binario) ou seja, 4 bit (meio byte). 16 * 0.5 = 8 bytes. Com processadores x86 penso que não podes guardar variáveis com mais de 64 bits (8 bytes...) pelo menos assim de uma forma directa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O maior tipo de dados em C é "unsigned long long" e equivale a 64bits, 2^64=18446744073709551616 .

Mais do que isso tens 3 hipoteses:

- Implementas as tuas próprias operações aritméticas e guardas os valores numa string.

- Procuras na net por uma biblioteca que te permita trabalhar com Big Integers (não devem faltar imo, mas nunca procurei)

- Mudas para outra linguagem, como Java ou Python que te permite trabalhar facilmente com eles.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora