Ich habe Data Encryption Standard (DES) implementiert, um einen Klartext zu verschlüsseln und die Chiffre daraus zu erhalten. Obwohl der DES einen 56-Bit-Schlüssel, eine 64-Bit-Blockgröße und 16 Runden verwendet, beginnt er mit einem einfachen Code. Ich benutzte 4-Bit-Schlüssel, 8-Bit-Blockgröße, 4 Runden und ohne Subschlüsselerzeugung (d. H. Derselbe Schlüssel wird in allen Runden verwendet). Laut DES wird für jede Runde eine Rundungsfunktion verwendet. In meinem Fall habe ich den bitweisen UND-Operator (&
) verwendet. HierWas ist der Datentyp zum Speichern benutzerdefinierter bitweiser Operator
ist ein Teil meines Codes
import java.util.Arrays;
public class Encrypt {
private int key[]={1,0,1,0};
private int dataBlock[]={1,1,1,0,1,0,1,1};
private int dataLeft[]=new int [4]; // for left part the plain text
private int dataRight[]=new int [4]; //for right part of the plain text
private int dataLeftTemp[];
private int dataRightTemp[]=new int [4];
private int i=2; // as initially two steps are run through automatically
private int n=5; // the no of rounds
private int cipher[];
public void splitting(){
int j=0; // for setting the indexes of the dataRight[]
for(int i=0;i<dataBlock.length;i++){
if (i<(dataBlock.length/2)){
dataLeft[i]=dataBlock[i];
}
// when i is greater than the half the index of the plain text
else{
dataRight[j]=dataBlock[i];
j++;
}
}
// for printing the array-------------------------------------------------
System.out.println("DataSet");
for(int i: dataLeft){
System.out.print(i);
}
for(int i: dataRight){
System.out.print(i);
}
System.out.println(" ");
System.out.println(" ");
//------------------------------------------------------------------------
}
//==============================round function================================================
public void roundingStart(){
System.out.println("Enter the round function");
for(int i=0;i<4;i++){
// AND function
dataRightTemp[i]=key[i] & dataRight[i];
// XOR function
dataRightTemp[i]=dataRightTemp[i]^dataLeft[i];
}
dataLeft=dataRight.clone();
// printResults();
printFirst();
roundingRest(dataLeft,dataRightTemp);
}
//rest of the code
}
Dies funktioniert gut. Aber wie ändere ich den obigen Code, damit der Benutzer den bitweisen Operator eingeben kann, der in der Rundenfunktion verwendet werden soll. Ich versuchte Scanner
mit, aber ich weiß nicht, welcher Datentyp so die Benutzereingabe als Bit-Operator zu speichern verwendet werden, dass es an der Leitung verwendet werden kann
dataRightTemp[i]=key[i] & dataRight[i];
Kann mich jemand erklären, wie dies zu tun?
Sie werden nicht in der Lage sein, den bitweisen Operator selbst zu speichern, sondern Flags zu speichern. Zum Beispiel, wenn Flag 1 ist, benutze &, Flag ist 2 use |, wenn Flag 3 ist, benutze^etc etc .. –