Как я могу перевести printf(“%c”,M);с C на Java для моей реализации DES?
-
20-08-2019 - |
Вопрос
Я студент из Германии, и для компьютерных занятий мне нужно реализовать DES-шифрование на Java (самостоятельно, а не с помощью Java-API) и подробно объяснить это.Однако я не нашел никаких примеров Java-кода с помощью Google Я действительно нашел простую реализацию на C.(Я не знаю C, я немного знаю C ++, но не настолько хорошо, указатель все еще время от времени достает меня.)
Поэтому я попытался просто преобразовать код с C на Java, что получилось примерно наполовину, однако у меня возникла проблема с последней частью, особенно с примером использования:
printf("%c",M);
Который, судя по тому, что сказал мне Google, похоже, преобразует числа (Integer) в 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?
Решение
Уже поздно, и я устал, но это не реализация DES, не так ли?
Это больше похоже на RSA.
Да, ссылка на ваш пост - это асимметричная криптосистема.DES симметричен.
Другие советы
Или, более кратко:
output.print((char)M);
Предполагается, что M является числовым значением, представляющим символ ASCII из 0-127 (или символ ISO 8859-1 из 0-255, или символ Unicode из 0-65535).
Он также предполагает, что вывод является PrintWriter или PrintStream, одним из которых является System.out (FileOutputStream легко оборачивается PrintOutputStream или PrintWriter (новый OutputStreamWriter)).
Des на самом деле - довольно сложный алгоритм, чтобы разобраться в себе.Я собирался написать об этом в блоге, но когда я докопался до сути.Я не мог разбить это на части, которыми я был доволен.
Вот как очень грубо работает DES.
- Выберите 64-битный ключ.(выбросьте 8 бит)
- Для каждого 64-битного блока, разделенного пополам
- Выполните некоторое изменение на основе xor на основе сгенерированных вложенных ключей и проделайте то же самое с другой половиной.
- Сделайте какую-нибудь замену.
- Сделайте больше перестановок
для расшифровки выполните команду в обратном порядке.
* это грубое упрощение.
эта программа предназначена для алгоритма RSA, а не для DES.Код DES в 8 раз больше, чем RSA :)