Criptografia rsa problema com o fmod resto [RESOLVIDO]

1. Criptografia rsa problema com o fmod resto [RESOLVIDO]

felipe de souza
Jguaxinim

(usa Debian)

Enviado em 20/10/2018 - 21:16h

Galera estou precisando muito de um help.

Não conheço muito bem a linguagem C então estou apanhando um pouco em um problema que encontrei pra fazer meu trabalho, estou fazendo uma criptografia rsa

e na decodificação usa a formula M = C^d mod (n), os meus valores são M = 131^23 mod (187) e tem que dar M=109 que seria refente a letra m na tabela ascii.

Mas eu não estou conseguindo retornar esse valor de forma alguma, fiz vários testes mas o resto não bate, se puderem da uma ajudinha, acredito ser coisa besta mas não consegui nem vendo em livros a biblioteca math.h.

Nesse link "http://www.calculadoraonline.com.br/divisao-polinomios" o valor bate corretamente então com isso sei que é possível o calculo, vou deixar também o video do youtube que eu estou validando os valores através dele pra ver se estão saindo corretos " https://www.youtube.com/watch?v=GAR1Ur_2IGk".

Tentei também com outros valores mas o resto sempre da problema.

Vou deixar parte do codigo aonde faço isso

double decod;

int arr2[20];




meu "i" esta dentro de um loop;



arr2[i]=fmod((pow(arr[i],E)),N);//CRIPTOGRAFO E já ARMAZENO O VALOR DENTRO DO ARRAY2        109^7 mod 187                
printf("atribuindo dentro do array2 = %d i = %d\n\r",arr2[i],i);
if (arr2[i]>=0)
{
decod = pow(arr2[i],D); //131^23 mod 187
printf("Valor do resultado =%lf valor\n\n\r",decod);
decod=fmod(decod,N);
printf("Valor de D =%d valor do array %d valor do N =%d valor do resultado =%lf\n\n\n\r",D,arr2[i],N,decod);
printf("i = %d\n\rdecodificado = %.d\n\e",i,decod);
}

i++;


dentro do arr vou armazenando as letras em ascii, que no caso a primeira estava digitando o "m" .

Se puderem dar uma atenção, obrigado ^^





detalhe o meus arrays tem " colchetes " só que quando salvo o tópico não esta entrando mas estão assim: "arr"colchetes i colchetes o " arr2" também


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/10/2018 - 01:52h

Não creio que meter ponto flutuante na conta vá lhe ajudar.

Sempre que eu ouvi falar sobre RSA com primos muito grandes, eu ouvi também sobre bibliotecas que implementam números inteiros gigantes (popularmente conhecidos como “BigNums”), que, diferentemente dos inteiros nativos do processador, podem ter um comprimento tão grande quanto se deseje (com o custo de que operações envolvendo tais números também não serão operações nativas, mas algoritmos de complexidade diretamente proporcional aos comprimentos dos operandos).

Se você estiver trabalhando com primos pequenos, pode ser que um tipo inteiro nativo lhe baste para representar a base, o expoente e o módulo. Contudo, as operações de exponenciação podem produzir resultados muito grandes, se você não tomar cuidado de levar resultados intermediários para seu valor congruente menor que o módulo.

Eis uma implementação simplista de uma exponenciação modular em C.

uint32_t modular_power(uint32_t base, uint32_t exp, uint32_t module){
base=base%module;
uint64_t result=1;
while(exp>0){
result*=base;
if(result>module)
result=result%module;
exp--;
}
return result;
}


3. Re: Criptografia rsa problema com o fmod resto [RESOLVIDO]

felipe de souza
Jguaxinim

(usa Debian)

Enviado em 23/10/2018 - 23:24h

paulo1205 escreveu:

Não creio que meter ponto flutuante na conta vá lhe ajudar.

Sempre que eu ouvi falar sobre RSA com primos muito grandes, eu ouvi também sobre bibliotecas que implementam números inteiros gigantes (popularmente conhecidos como “BigNums”), que, diferentemente dos inteiros nativos do processador, podem ter um comprimento tão grande quanto se deseje (com o custo de que operações envolvendo tais números também não serão operações nativas, mas algoritmos de complexidade diretamente proporcional aos comprimentos dos operandos).

Se você estiver trabalhando com primos pequenos, pode ser que um tipo inteiro nativo lhe baste para representar a base, o expoente e o módulo. Contudo, as operações de exponenciação podem produzir resultados muito grandes, se você não tomar cuidado de levar resultados intermediários para seu valor congruente menor que o módulo.

Eis uma implementação simplista de uma exponenciação modular em C.

uint32_t modular_power(uint32_t base, uint32_t exp, uint32_t module){
base=base%module;
uint64_t result=1;
while(exp>0){
result*=base;
if(result>module)
result=result%module;
exp--;
}
return result;
}


Vou dar uma olhada na função que você me mandou e ver se consigo resolver o problema. Agradeço! ^^




4. Re: Criptografia rsa problema com o fmod resto [RESOLVIDO]

felipe de souza
Jguaxinim

(usa Debian)

Enviado em 24/10/2018 - 00:28h

paulo1205 escreveu:

Não creio que meter ponto flutuante na conta vá lhe ajudar.

Sempre que eu ouvi falar sobre RSA com primos muito grandes, eu ouvi também sobre bibliotecas que implementam números inteiros gigantes (popularmente conhecidos como “BigNums”), que, diferentemente dos inteiros nativos do processador, podem ter um comprimento tão grande quanto se deseje (com o custo de que operações envolvendo tais números também não serão operações nativas, mas algoritmos de complexidade diretamente proporcional aos comprimentos dos operandos).

Se você estiver trabalhando com primos pequenos, pode ser que um tipo inteiro nativo lhe baste para representar a base, o expoente e o módulo. Contudo, as operações de exponenciação podem produzir resultados muito grandes, se você não tomar cuidado de levar resultados intermediários para seu valor congruente menor que o módulo.

Eis uma implementação simplista de uma exponenciação modular em C.

uint32_t modular_power(uint32_t base, uint32_t exp, uint32_t module){
base=base%module;
uint64_t result=1;
while(exp>0){
result*=base;
if(result>module)
result=result%module;
exp--;
}
return result;
}
Galera resolvido, paulo1205 muito obrigado pela ajuda, consegui usando a função acima so que por conta de ser um trabalho que teria de ser tudo implementado manualmente digamos eu usei variaveis no lugar da funçao, como unsigned long long int mas é a mesma vlw. ^^









5. Re: Criptografia rsa problema com o fmod resto

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/10/2018 - 08:51h

Se a questão foi resolvida, marque o tópico como resolvido.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts