Ir ao conteúdo
  • Cadastre-se
Serafin

Desenvolvendo criptografia rsa em java

Recommended Posts

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: serafinpuc@gmail.com

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(){
        
    }
    
}

 

Editado por Simon Viegas
Ao postar um código, favor inserir na tag CODE (botão <>)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×