2016-06-12 12 views
1

プレーンテキストを暗号化して暗号を得るためにデータ暗号化標準(DES)を実装しました。 DESは、単純なコードから開始するには、56ビットのキー、64ビットのブロックサイズ、および16ラウンドを使用しますが、私は4ビットのキー、8ビットのブロックサイズ、4ラウンドを使用し、サブキー生成なしで(つまり、すべてのラウンドで同じキーが使用されます)各ラウンドごとにDESに従って、ラウンド関数が使用される。私の場合、ビット単位のAND(&)演算子を使用しました。ここでユーザーが入力したビット単位の演算子を格納するデータ型は何ですか

は、これが正常に動作します私のコードの一部

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 
} 

です。しかし、ラウンド関数で使用されるビット単位の演算子をユーザーが入力できるように、上記のコードを変更するにはどうすればよいですか。私はScannerを使用してみましたが、私は誰かがこれを行う方法を私に説明でき、それはライン

dataRightTemp[i]=key[i] & dataRight[i]; 

で使用することができるようにビット演算子としてユーザー入力を保存するために使用されるデータ・タイプを知らないのですか?

+1

ビット演算子自体を格納することはできませんが、フラグを格納します。たとえば、フラグが1の場合は&を使用し、フラグは2つの使用|、フラグが3の場合は^などなどです。 –

答えて

2

オペレータ自身を保存することはできません。

の代わりに、ユーザーにオペレータをテキストとして入力させます。 andor、.. のコードで、このユーザーテキストに基づいて正しい演算子を使用するためにifステートメントを使用してください。擬似コード:

if ("and".equalsIgnoreCase(userInput) { 
    dataRightTemp[i]=key[i] & dataRight[i]; 
} else if ("or".equalsIgnoreCase(userInput)) { 
    dataRightTemp[i]=key[i] | dataRight[i]; 
} 
関連する問題