SOLVE USING OCTAVE ONLY!!!!! (image of both code and output is IMPORTANT) Question: Design a Knapsack public key cryptosystem, using this system, encrypt the plaintext “BHP”. Show the details of the design process (give the selected values with explanation why selected them) and encryption process. Include in your answer Octave codes used. Use the ASCII code to convert the plaintext characters to numbers. Finally, show how to decrypt the obtained cipher values to get the plaintext character back. The code I wrote but does not work: plaintext = [66 72 80]; % plaintext numbers sequence = [1 2 4 8 16 40]; % superincreasing sequence knapsack_size = 60; % knapsack size m=110 n=31 for i = 1:length(plaintext) x = plaintext(i); for j = 1:length(sequence) if x >= sequence(j) x = x - sequence(j); knapsack(j) = 1; else knapsack(j) = 0; end end cipher(i,:) = knapsack; end cipher cipher = [1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1]; % cipher values sequence = [2 4 8 16 32]; % superincreasing sequence for i = 1:length(cipher) knapsack = cipher(i); plaintext(i) = sum(knapsack.*sequence); end plaintext plaintext = 66,72,80. for i=1:m if mod(i.*n,m) inverseofn=i break; #inverse found endif endfor if inverseofn!=0 printf("Inverse is: %n\n",inverseofn) else printf("Inverse does not exist") endif
SOLVE USING OCTAVE ONLY!!!!! (image of both code and output is IMPORTANT)
Question: Design a Knapsack public key cryptosystem, using this system, encrypt the plaintext “BHP”. Show the details of the design process (give the selected values with explanation why selected them) and encryption process. Include in your answer Octave codes used. Use the ASCII code to convert the plaintext characters to numbers. Finally, show how to decrypt the obtained cipher values to get the plaintext character back.
The code I wrote but does not work:
plaintext = [66 72 80]; % plaintext numbers
sequence = [1 2 4 8 16 40]; % superincreasing sequence
knapsack_size = 60; % knapsack size
m=110
n=31
for i = 1:length(plaintext)
x = plaintext(i);
for j = 1:length(sequence)
if x >= sequence(j)
x = x - sequence(j);
knapsack(j) = 1;
else
knapsack(j) = 0;
end
end
cipher(i,:) = knapsack;
end
cipher
cipher = [1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1]; % cipher values
sequence = [2 4 8 16 32]; % superincreasing sequence
for i = 1:length(cipher)
knapsack = cipher(i);
plaintext(i) = sum(knapsack.*sequence);
end
plaintext
plaintext = 66,72,80.
for i=1:m
if mod(i.*n,m)
inverseofn=i
break;
#inverse found
endif
endfor
if inverseofn!=0
printf("Inverse is: %n\n",inverseofn)
else
printf("Inverse does not exist")
endif
Step by step
Solved in 3 steps with 1 images