create a single function in matlab that can both encrypt and decrypt a message u
ID: 3704692 • Letter: C
Question
create a single function in matlab that can both encrypt and decrypt a message using beaufort cipher. The function must use loops and branching statements. It also may not use the find function.
1. Remove any special characters, punctuation and spaces from the message to be encoded.
2. Convert all lowercase letters to uppercase and use the 26-character alphabet used to create the encryption squares.
3. Generate the encryption/decryption key.
4. Encrypt/decrypt the message and output the result.
5. Decrypt the given message.
Explanation / Answer
Solution:
code:
Encryptioin:
function cText = encrypt(pText, key)
v = vigenere;
exclude = regexp(pText, '[^a-zA-Z ]');
pText(exclude) = [];
key = lower(key) - double('a') + 1;
key(key < 0) = 27;
pText = lower(pText) - double('a') + 1;
pText(pText < 0) = 27;
keyIndex = mod(0:(numel(pText)-1), numel(key))+1;
k = key(keyIndex);
cText = arrayfun(@(m,n) v(m,n), k, pText) - 1;
cText(cText == 26) = double(' ') - double('a');
cText = upper(char(cText + double('a')));
decryption:
function pText = decrypt(cText, key)
v = vigenere;
key = lower(key) - double('a') + 1;
key(key < 0) = 27;
cText = lower(cText) - double('a') + 1;
cText(cText < 0) = 27;
keyIndex = mod(0:(numel(cText)-1), numel(key))+1;
k = key(keyIndex);
pText = arrayfun(@(m,n) find(v(m,:) == n), k, cText) - 1;
pText(pText == 26) = double(' ') - double('a');
pText = upper(char(pText + double('a')));
vigenere
function v = vigenere
count = 27;
alpha = 1:count;
v = arrayfun(@(n) circshift(alpha, [0, -n]), 0:count-1, ...
'UniformOutput', false);
v = reshape([v{:}], count, count);
I hope this helps if you find any problem. Please comment below. Don't forget to give a thumbs up if you liked it. :)
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.