Ir ao conteúdo
  • Cadastre-se

Serafin

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Pessoal, bom dia! Estou tendo dificuldades para desenvolver esse programa: "Implementar, em linguagem de programação, o esquema RSA. OBS: as operações modulares DEVEM ser implementadas. Não será aceito trabalho que funcione sem a implementação dessas operações. Sugere-se que o usuário ESCOLHA "P" e "Q" (combo box, com os primos, no mínino, até 1000). O sistema pode apresentar os possíveis "E" (outra combo). O usuário, ao escolher um "E", permite que o sistema gere um "D". Para a cifragem e decifragem da mensagem (que o usuário deverá digitar), cada desenvolvedor define como irá codificar. O importante é que a mensagem cifrada possa ser editável, pois eu farei testes para verificar o que ocorre ao decifrar a mensagem." Abaixo segue o que eu consegui até o momento, porém, não sei como decriptografar e o que colocar na classe main para executar de forma correta. Alguém tem alguma sugestão ou exemplo? E-mail: [email protected] import java.math.BigInteger; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author serafin */ public class RSA{ private int p,q,n,pubkey; public void params(String str, int p, int q){ this.p = p; this.q = q; n=this.p*this.q; pubkey = 13; //pubKey(); System.out.println("pk: "+pubkey); crypt(str); } private int pubKey(){ int e=2; int ftot = fTotiente(p,q); while(mdc(ftot,e) != 1){ e++; } return e; } private int mdc(int x, int y){ if(y==0) return x; else return mdc(y, x%y); } private int fTotiente(int p, int q){ return ((p - 1) * (q - 1)); } private void crypt(String str){ char s; int i=0; while(i < str.length()){ s = str.charAt(i); int m = 0; switch(s){ case ('A'): m = 1; break; case ('B'): m = 2; break; case ('C'): m = 3; break; case ('D'): m = 4; break; case ('E'): m = 5; break; case ('F'): m = 6; break; case ('G'): m = 7; break; case ('H'): m = 8; break; case ('I'): m = 9; break; case ('J'): m = 10; break; case ('K'): m = 11; break; case ('L'): m = 12; break; case ('M'): m = 13; break; case ('N'): m = 14; break; case ('O'): m = 15; break; case ('P'): m = 16; break; case ('Q'): m = 17; break; case ('R'): m = 18; break; case ('S'): m = 19; break; case ('T'): m = 20; break; case ('U'): m = 21; break; case ('V'): m = 22; break; case ('X'): m = 23; break; case ('Y'): m = 24; break; case ('Z'): m = 25; break; } int pk = pubkey % n; BigInteger bm = new BigInteger(""+m); //System.out.println("BM: "+bm); BigInteger bn = new BigInteger(""+n); //System.out.println("BN: "+bn); BigInteger r = bm.pow(pk); //System.out.println(r); BigInteger c = r.mod(bn); System.out.print(" "+c); i++; } } public void decrypt(){ } }

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