Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

This is code I\'m currently working on learning about ciphers, I\'m still missin

ID: 3722989 • 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

As I can figure it out that key is a string or password we can say.I am assuming it because it is very important to know about the data type.So most probably it is a string having many characters.
In java one character has size of 2 bytes.If key is of length n(ie. it ihas n characters), that means it has 2*n 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

I hope I could solve your problem.Further, If you have any doubt, Please ask.

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote