Jump to content

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


ddxtreme

Recommended Posts

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

Link to comment
Share on other 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?

Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.