Как я могу перевести printf ("% c", M); от C до Java для моей реализации DES? - PullRequest
0 голосов
/ 24 января 2009

Я студент немецкого языка, и для компьютерных классов мне нужно реализовать DES-шифрование на Java (самостоятельно, без использования Java-API) и объяснить это подробно. Я не нашел примеров использования Java-кода с помощью Google, однако Я нашел простую реализацию в C . (Я не знаю C, я немного знаю C ++, но не очень хорошо, указатель все еще получает меня время от времени.)

Поэтому я попытался просто преобразовать код из C в Java, что сработало примерно на полпути, однако у меня возникла проблема с последней частью, особенно с примером использования:

printf("%c",M);

Что, судя по тому, что сказал мне Google, похоже, преобразовывает числа (целые числа) в символы ASCII, но я не совсем уверен. Кажется, мой Код работает до этой последней части, поэтому я был бы благодарен всем, кто может дать мне подсказку.

Мой код:

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

Как я могу конвертировать

printf("%c",M);

для Java, и является ли это тогда полной реализацией DES?

Ответы [ 4 ]

2 голосов
/ 25 января 2009

Уже поздно, и я устал, но это не реализация DES, не так ли?

Это больше похоже на RSA .

Да, ссылка на ваш пост - асимметричная криптосистема. DES симметричный.

1 голос
/ 25 января 2009

Или, более кратко:

output.print((char)M);

Предполагается, что M - это числовое значение, представляющее символ ASCII от 0 до 127 (или символ ISO 8859-1 от 0 до 255, или символ Unicode от 0 до 65535).

Предполагается также, что выводом является PrintWriter или PrintStream, одним из которых является System.out (FileOutputStream легко переносится с помощью PrintOutputStream или PrintWriter (новый OutputStreamWriter)).

0 голосов
/ 14 мая 2009

эта программа для алгоритма RSA, а не для DES. Код DES в 8 раз больше, чем RSA:)

0 голосов
/ 25 января 2009

Дес на самом деле является довольно сложным алгоритмом, чтобы заставить вас задуматься. Я собирался написать об этом в блоге, но когда я копался. Я не мог разбить его на куски, которыми был доволен.

Вот как грубо работает DES.

  1. Выберите 64-битный ключ. (выбросить 8 битов)
  2. Для каждого 64-битного блока, разделенного пополам
  3. Выполнить некоторую перестановку на основе xor на основе сгенерированных подключей и сделать то же самое для другой половины.
  4. Сделайте некоторую замену.
  5. Делать больше перестановок

Расшифровать запуск в обратном порядке.

* это грубое упрощение.

...