1answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
notka56 [123]
3 years ago
15

Implement the RC4 stream cipher in C . User should be able to enter any key that is 5 bytes to 32 bytes long. Be sure to discard

the first 3072 bytes of the pseudo random numbers. THE KEY OR THE INPUT TEXT MUST NOT BE HARD CODED IN THE PROGRAM.
Computers and Technology
1 answer:
Marina86 [1]3 years ago
3 0

RC4 stream cipher in C. User is able to enter any key that is 5 bytes to 32 bytes long

Explanation:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define N 256   // 2^8

void swap(unsigned char *a, unsigned char *b) {

   int tmp = *a;

   *a = *b;

   *b = tmp;

}

int KSA(char *key, unsigned char *S) {

   int len = strlen(key);

   int j = 0;

   for(int i = 0; i < N; i++)

       S[i] = i;

   for(int i = 0; i < N; i++) {

       j = (j + S[i] + key[i % len]) % N;

       swap(&S[i], &S[j]);

   }

   return 0;

}

int PRGA(unsigned char *S, char *plaintext, unsigned char *ciphertext) {

   int i = 0;

   int j = 0;

   for(size_t n = 0, len = strlen(plaintext); n < len; n++) {

       i = (i + 1) % N;

       j = (j + S[i]) % N;

       swap(&S[i], &S[j]);

       int rnd = S[(S[i] + S[j]) % N];

       ciphertext[n] = rnd ^ plaintext[n];

   }

   return 0;

}

int RC4(char *key, char *plaintext, unsigned char *ciphertext) {

   unsigned char S[N];

   KSA(key, S);

   PRGA(S, plaintext, ciphertext);

   return 0;

}

int main(int argc, char *argv[]) {

   if(argc < 3) {

       printf("Usage: %s <key> <plaintext>", argv[0]);

       return -1;

   }

   unsigned char *ciphertext = malloc(sizeof(int) * strlen(argv[2]));

   RC4(argv[1], argv[2], ciphertext);

   for(size_t i = 0, len = strlen(argv[2]); i < len; i++)

       printf("%02hhX", ciphertext[i]);

   return 0;

}

You might be interested in
Jerry recently purchased a new iPad. He needs guidance on setting it up and wants to find documentation to help with the setup.
SVEN [57.7K]

Answer:

That new iPad must contain a user guide. Its beneficial in setting up and configuring the device.  He can also find detailed steps on how to connect to a network, configure email, update the OS, sync, and back up settings and data.  

6 0
4 years ago
Read 2 more answers
What is the purpose of a budget
Iteru [2.4K]
To one say money, and two to have pocket money. If you are on a budget which is when you can spend X amount of money. Then you would be able to pay bills and not go over your budget or you  will not have money for Bills and car notes and insurance, stuff like that.

3 0
3 years ago
List out any five input and output devideos​
monitta
Asks issiaksmskskskejehshsjsjsnsdkxxkdnsabhwssns
4 0
3 years ago
What are creative commons?
Olenka [21]

Answer:

c

Explanation:

4 0
3 years ago
Read 2 more answers
Consider the definition of the following class: (1, 2, 3, 5, 7) class productType //Line 1 { //Line 2 public: //Line 3 productTy
Shkiper50 [21]

Answer:

The C++ codes are given below with appropriate comments

Explanation:

// productType.h

#ifndef PRODUCTTYPE_H

#define PRODUCTTYPE_H

class productType

{

public:

productType();

productType(int , double ,double);

productType(string,int , double ,double);

productType(string,string,string,int , double ,double);

void set(string,string,string,int , double ,double);

void print() const;

void setQuantitiesInStock(int x);

int getQuantitiesInStock() const;

void updateQuantitiesInStock(int x);

 

void setPrice(double x);

double getPrice() const;

void setDiscount(double d);

double getDiscount() const;

 

 

 

private:

// Declaring variables

string productName;

string id;

string manufacturer;

int quantitiesInStock;

double price;

double discount;

};

#endif

=============================

// productType.cpp

#include <iostream>

using namespace std;

#include "productType.h"

productType::productType()

{

this->productName="";

this->id="";

this->manufacturer="";

this->quantitiesInStock=0;

this->price=0.0;

this->discount=0.0;

}

productType::productType(int quantitiesInStock, double price,double discount)

{

this->productName="";

this->id="";

this->manufacturer="";

this->quantitiesInStock=quantitiesInStock;

this->price=price;

this->discount=discount;

}

productType::productType(string productName,int quantitiesInStock, double price,double discount)

{

this->productName=productName;

this->id="";

this->manufacturer="";

this->quantitiesInStock=quantitiesInStock;

this->price=price;

this->discount=discount;

}

productType::productType(string productName,string id,string manufacturer,int quantitiesInStock, double price,double discount)

{

this->productName=productName;

this->id=id;

this->manufacturer=manufacturer;

this->quantitiesInStock=quantitiesInStock;

this->price=price;

this->discount=discount;

}

void productType::set(string productName,string id,string manufacturer,int quantitiesInStock, double price,double discount)

{

this->productName=productName;

this->id=id;

this->manufacturer=manufacturer;

this->quantitiesInStock=quantitiesInStock;

this->price=price;

this->discount=discount;

}

void productType::print() const

{

cout<<"Product Name :"<<productName<<endl;

cout<<"Id :"<<id<<endl;

cout<<"Manufacturer :"<<manufacturer<<endl;

cout<<"Quantities In Stock :"<<quantitiesInStock<<endl;

cout<<"Price :$"<<price<<endl;

cout<<"Discount :%"<<discount<<endl;

}

void productType::setQuantitiesInStock(int x)

{

this->quantitiesInStock=x;

}

int productType::getQuantitiesInStock() const

{

return quantitiesInStock;

}

 

void productType::setPrice(double x)

{

this->price=x;

}

double productType::getPrice() const

{

return price;

}

void productType::setDiscount(double d)

{

this->discount=d;

}

double productType::getDiscount() const

{

return discount;

}

void productType::updateQuantitiesInStock(int x)

{

this->quantitiesInStock=x;

}

=============================

// main.cpp

#include <iostream>

using namespace std;

#include "productType.h"

int main()

{

productType pt("Mobile","1234","Lenovo",34,1500,10);

pt.print();

 

pt.updateQuantitiesInStock(50);

cout<<"\nAfter Modifying the quantity ::"<<endl;

pt.print();

 

return 0;

}

6 0
4 years ago
Other questions:
  • Read the excerpt below and answer the question.
    14·1 answer
  • Which of the following is NOT a good idea to do after you change the root password?
    12·1 answer
  • _______is the equal distribution of visual weight on either side of an imaginary axis through the center of a design. A building
    6·2 answers
  • Why is time management considered a soft skill
    10·2 answers
  • Which best describes the differences between a resume and a CV?
    13·2 answers
  • Which of the following options allow you to access a computer remotely? Check all that apply.
    10·1 answer
  • Though there are no specific federal laws for cyberbullying, in some cases cyberbullying
    6·1 answer
  • Who Keeps Reporting My questions<br><br> Please Be Honest Lying Isnt Nice
    15·1 answer
  • Using the simple alphabet code below, you will decode and encode the message. Write the Full
    6·1 answer
  • Which type of relationship is responsible for teaching you values and how to communicate?
    9·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!