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

create a single function in matlab that can both encrypt and decrypt a message u

ID: 3704690 • Letter: C

Question

create a single function in matlab that can both encrypt and decrypt a message using a porta 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

As per above equation:

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')));

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);