Como posso traduzir printf ( “% c”, M); de C para Java para minha implementação DES?

StackOverflow https://stackoverflow.com/questions/476576

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu sou um estudante alemão e para aulas de informática Eu preciso implementar o DES-criptografia em Java (por mim, não usando a Java API) e explicá-lo em detalhe. I não encontrou nenhum-code-exemplos Java usando google, no entanto I havia uma implementação fácil em C . (Eu não sei C, eu sei um pouco de C ++, mas não tão bem, ponteiro ainda obter-me de vez em quando.)

Então, eu tentei simplesmente converter o código de C para Java, o que deu certo na metade do caminho, no entanto eu estou tendo um problema com a última parte, especialmente com o exemplo usando:

printf("%c",M);

O que, a partir do que Google me disse, parece ser a conversão de números (inteiro) para ASCII-personagens, mas eu não tenho certeza. Meu código parece estar funcionando até essa última parte, então eu ficaria grato para qualquer um que pode dar-me a corrigir / dica.

Meu código:

import java.util.Scanner;

public class DES {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Scanner eingabe = new Scanner(System.in);

        int p, q, key2, fn, encryption_key, temp1 , temp2 ,
            t, s =0 , privatekey1=1, b=0 , passwort_s=0, klartext;
        int[] Cipher = new int [100];
        String passwort;

        System.out.println("Enter the value of p and q");

        p = eingabe.nextInt();
        q = eingabe.nextInt();

        System.out.println(p);
        System.out.println(q);

        key2= p*q;


        fn=(p-1)*(q-1);
        System.out.println("Enter Enryption key e: ");
        encryption_key = eingabe.nextInt();

        do {

            s=(privatekey1*encryption_key)%fn;
            privatekey1++; 

        } while (s!=1); 

        privatekey1=privatekey1-1;



        System.out.println("Public Key : "+ encryption_key + ","+ key2 );
        System.out.println("Private Key: "+ privatekey1 + "," +key2 );
        System.out.println("Enter Message: ");
        passwort= eingabe.next();
        for ( temp2 = 0; temp2 < passwort.length(); temp2++) 
        {
            t = passwort.charAt(temp2);
            passwort_s=1;
            for(temp1 =0 ; temp1< encryption_key ; temp1++){
                passwort_s= passwort_s*t%key2;
            }
            passwort_s= passwort_s%key2;
            System.out.println(passwort_s);
        }

        System.out.println("Enter cipher Text: ");
        for(temp1=0;temp1< passwort.length(); temp1++ )
        {
            Cipher[temp1]= eingabe.nextInt();
        }

        System.out.println("Plainttext: ");
        for(temp2 =0; temp2 < passwort.length(); temp2++);
        {
            klartext=1;

            for(temp1 =0; temp1 < privatekey1; temp1 ++){
                klartext=klartext*Cipher[temp2]%key2;
            }
            klartext=klartext%key2;
            System.out.println(klartext);
        }
    }
}

Como posso converter o

printf("%c",M);

para Java, e é isso, então uma implementação completa DES?

Foi útil?

Solução

É tarde e estou cansado, mas isso não é uma implementação de DES, não é?

Parece mais RSA .

Sim, o link no seu post é um sistema de criptografia assimétrica. DES é simétrica.

Outras dicas

Ou, de forma mais concisa:

output.print((char)M);

Isto assume M é um valor numérico que representa um carácter ASCII de 0-127 (ou uma personagem ISO 8859-1 0-255, ou um caractere de Unicode 0-65535).

É também assume saída é um PrintWriter ou PrintStream, um dos quais é System, (um FileOutputStream é facilmente envolto por um PrintOutputStream, ou PrintWriter (novo OutputStreamWriter)).

Des é realmente um algotrithm bastante difícil de obter sua cabeça em torno. Eu estava prestes a blog sobre isso, mas quando eu cavei para baixo. Eu não poderia dividi-la em pedaços eu era feliz com ele.

Aqui está como muito roughtly DES funciona.

  1. Escolha uma chave de 64 bits. (Jogar fora 8bits)
  2. Para cada divisão bloco de 64 bits ao meio
  3. Faça alguma perumutation baseado xor baseada em sub-chaves genererated e fazer o mesmo com a outra metade.
  4. Faça alguma substituição.
  5. Faça mais permutatation

Para descriptografar prazo no número reverso.

* esta é uma simplificação grosseira.

este programa é para RSA algoritmo e não para DES. código de DES é 8 vezes maior do que a RSA:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top