Como posso traduzir printf ( “% c”, M); de C para Java para minha implementação DES?
-
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?
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.
- Escolha uma chave de 64 bits. (Jogar fora 8bits)
- Para cada divisão bloco de 64 bits ao meio
- Faça alguma perumutation baseado xor baseada em sub-chaves genererated e fazer o mesmo com a outra metade.
- Faça alguma substituição.
- 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:)