存储用户输入的按位运算符的数据类型是什么
What is the data type to store user inputted bitwise operator
我已经实施了数据加密标准 (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
}
这很好用。但是我该如何更改上面的代码,以便用户可以输入要在 round 函数中使用的按位运算符。我尝试使用 Scanner
但我不知道使用什么数据类型将用户输入存储为按位运算符以便它可以在行
处使用
dataRightTemp[i]=key[i] & dataRight[i];
谁能告诉我该怎么做?
您不能存储运算符本身。
而是让用户将运算符作为文本输入:例如and
, or
, ..
并在您的代码中使用 if 语句根据此用户文本使用正确的运算符。伪代码:
if ("and".equalsIgnoreCase(userInput) {
dataRightTemp[i]=key[i] & dataRight[i];
} else if ("or".equalsIgnoreCase(userInput)) {
dataRightTemp[i]=key[i] | dataRight[i];
}
我已经实施了数据加密标准 (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
}
这很好用。但是我该如何更改上面的代码,以便用户可以输入要在 round 函数中使用的按位运算符。我尝试使用 Scanner
但我不知道使用什么数据类型将用户输入存储为按位运算符以便它可以在行
dataRightTemp[i]=key[i] & dataRight[i];
谁能告诉我该怎么做?
您不能存储运算符本身。
而是让用户将运算符作为文本输入:例如and
, or
, ..
并在您的代码中使用 if 语句根据此用户文本使用正确的运算符。伪代码:
if ("and".equalsIgnoreCase(userInput) {
dataRightTemp[i]=key[i] & dataRight[i];
} else if ("or".equalsIgnoreCase(userInput)) {
dataRightTemp[i]=key[i] | dataRight[i];
}