This is code I\'m currently working on learning about ciphers, I\'m still missin
ID: 3723503 • Letter: T
Question
This is code I'm currently working on learning about ciphers, I'm still missing a few requirements and one requirement is that I need to use be able to input a key that is within the range of 5 to 32 bytes long as well as specifically use a 5 byte key. I'm not all to familair with bits and bytes, could I get an example of how this would be done? An explanation would also be appreciated, thanks in advance.
package rccipher;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class RCCipher
{
static void output(int disp[])
{
char con[]=new char[disp.length];
for(int l=0;l<disp.length;l++)
{
con[l]=(char)disp[l];
System.out.print(con[l]);
}
}
public static void main(String args[])throws IOException
{
String text = "In cryptography, RC4 (Rivest Cipher 4 also known as ARC4 or "
+ " ARCFOUR meaning Alleged RC4) is a stream cipher. While remarkable"
+ " for its simplicity and speed in software, multiple vulnerabilities"
+ " have been discovered in RC4, rendering it insecure. It is especially"
+ " vulnerable when the beginning of the output keystream is not discarded,"
+ " or when nonrandom or related keys are used. Particularly problematic "
+ " uses of RC4 have led to very insecure protocols such as WEP.";
String key;
int sbox[] = new int[256];
int kgen[] = new int[256];
Scanner scan = new Scanner(System.in);
int temp=0;
System.out.println("ORIGINAL PLAIN TEXT:");
System.out.println(text);
System.out.println(" ENTER KEY:");
key=scan.nextLine();
char ptextc[]=text.toCharArray();
char keyc[]=key.toCharArray();
int cipher[]=new int[text.length()];
int decrypt[]=new int[text.length()];
int plainTexti[]=new int[text.length()];
int keyi[]=new int[key.length()];
for(int i=0;i<text.length();i++)
{
plainTexti[i]=(int)ptextc[i];
}
for(int i=0;i<key.length();i++)
{
keyi[i]=(int)keyc[i];
}
for(int i=0;i<255;i++)
{
sbox[i]=i; kgen[i]=keyi[i%key.length()];
}
int j=0;
for(int i=0;i<255;i++)
{
j=(j+sbox[i]+kgen[i])%256;
temp=sbox[i];
sbox[i]=sbox[j];
sbox[j]=temp;
}
int i=0;
j=0;
int z=0;
for(int l=0;l<text.length();l++)
{
i = (l+1)%256;
j = (j+sbox[i])%256;
temp = sbox[i];
sbox[i] = sbox[j];
sbox[j] = temp;
z = sbox[(sbox[i]+sbox[j])%256];
cipher[l] = z^plainTexti[l];
decrypt[l] = z^cipher[l];
}
System.out.println(" CIPHER TEXT:");
output(cipher);
System.out.println(" PLAIN TEXT:");
output(decrypt);
System.out.println(" ");
}
}
Explanation / Answer
ANSWER:
THE BELOW PROCEDURE INDICATES THAT THE INPUT IS WITHIN THE RANGE OF 2 TO 32 BYTES,
As per your requirement this 2*n>= 5 and 2n<=32
You can test this like this:
int n = 2* key.length();
if(!(n>=5&&n<=32))
//Key is not of desired length
Otherwise
//This is as per requirement
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.