Ir ao conteúdo
  • Cadastre-se

Desenvolvendo criptografia rsa em java


Serafin

Posts recomendados

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

 

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...