Answer: Provided in the explanation section
Step-by-step explanation:
C++ Code
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
// read plain text from file
void readPlaneText(char *file,char *txt,int &size){
ifstream inp;
inp.open(file);
// index initialize to 0 for first character
int index=0;
char ch;
if(!inp.fail()){
// read each character from file
while(!inp.eof()){
inp.get(ch);
txt[index++]=ch;
}
}
// size of message
size=index-1;
}
// read key
int **readKey(char *file,int **key,int &size){
ifstream ink;
//
ink.open(file);
if(!ink.fail()){
// read first line as size
ink>>size;
// create 2 d arry
key=new int*[size];
for(int i=0;i<size;i++){
key[i]=new int[size];
}
// read data in 2d matrix
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
ink>>key[i][j];
}
}
}
return key;
}
// print message
void printText(string txt,char *msg,int size){
cout<<txt<<":\\\\";
for(int i=0;i<size;i++){
cout<<msg[i];
}
}
// print key
void printKey(int **key,int size){
cout<<"\\\\Key matrix:\\\\";
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
cout<<key[i][j]<<" ";
}
cout<<endl;
}
}
void encrypt(char *txt,int size,int **key,int kSize,char *ctxt){
int *data=new int[kSize];
for(int i=0;i<size;i=i+kSize){
// read key size concecutive data
for(int a=0;a<kSize;a++){
data[a]=txt[i+a]-'a';
}
// cipher operation
for(int a=0;a<kSize;a++){
int total=0;
for(int b=0;b<kSize;b++){
total+=key[a][b]*data[b];
}
total=total%26;
ctxt[i+a]=(char)('a'+total);
}
}
}
int main(int argc,char **argv){
char text[10000];
char ctext[10000];
int **key;
int keySize;
int size;
// input
key=readKey(argv[1],key,keySize);
readPlaneText(argv[2],text,size);
encrypt(text,size,key,keySize,ctext);
// output
printKey(key,keySize);
cout<<endl<<endl;
printText("Plaintext",text,size);
cout<<endl<<endl;
printText("Ciphertext",ctext,size);
return 0;
}
cheers i hope this helped !!!