¿Cómo puedo traducir printf (& # 8220;% c & # 8221;, M); de C a Java para mi implementación DES?

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

  •  20-08-2019
  •  | 
  •  

Pregunta

Soy un estudiante alemán y para las clases de informática necesito implementar el cifrado DES en Java (por mí mismo, no utilizando la API de Java) y explicarlo en detalle. No encontré ningún ejemplo de código Java usando google, sin embargo I encontré una implementación fácil en C . (No sé C, sé un poco de C ++, pero no tan bien, el puntero todavía me da de vez en cuando).

Así que intenté simplemente convertir el código de C a Java, que funcionó aproximadamente a la mitad, sin embargo, tengo un problema con la última parte, especialmente con el ejemplo usando:

printf("%c",M);

Que, por lo que Google me dijo, parece estar convirtiendo números (enteros) en caracteres ASCII, pero no estoy realmente seguro. Mi código parece estar funcionando hasta la última parte, por lo que agradecería a cualquiera que me pueda dar una solución / sugerencia.

Mi 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);
        }
    }
}

¿Cómo puedo convertir el

<*>

a Java, y ¿es entonces una implementación completa de DES?

¿Fue útil?

Solución

Es tarde y estoy cansado, pero esta no es una implementación DES, ¿verdad?

Se parece más a RSA .

Sí, el enlace en tu publicación es un criptosistema asimétrico. DES es simétrico.

Otros consejos

O, de manera más concisa:

output.print((char)M);

Esto supone que M es un valor numérico que representa un carácter ASCII de 0-127 (o un carácter ISO 8859-1 de 0-255 o un carácter Unicode de 0-65535).

También supone que la salida es PrintWriter o PrintStream, uno de los cuales es System.out (un FileOutputStream se ajusta fácilmente con un PrintOutputStream o PrintWriter (nuevo OutputStreamWriter)).

Des es en realidad un algoritmo bastante difícil de entender. Estaba a punto de bloguear sobre eso, pero cuando cavé. No podía dividirlo en pedazos con los que estaba feliz.

Así es como funciona despiadadamente DES.

  1. Elija una clave de 64 bits. (tirar 8bits)
  2. Por cada bloque de 64 bits dividido por la mitad
  3. Haga una perumutación basada en xor basada en subclaves generadas y haga lo mismo con la otra mitad.
  4. Haz alguna sustitución.
  5. Hacer más permutaciones

para descifrar la ejecución en número inverso.

* esta es una simplificación general.

este programa es para algoritmo RSA y no para DES. El código DES es 8 veces más grande que RSA :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top