Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Please help with my ciphering program.

  1. Oct 13, 2007 #1
    I have the following ciphering program.

    a1 = input('Please enter a sentence: ','s');
    x = upper(a1); % Change the text to uppercase
    p = CleanStr(x) % Call a function CleanStr to remove
    % all unwanted characters
    double(p); % String to ASCII numbers

    for i = 1:numel(p) % Iterate as long as there are characters
    % in the string

    if (p(i) == 65) % Find all ASCII codes which are less
    % than 88 and not spaces
    p(i) = 83; % Replace each letter with the letter
    % 3 places along in the alphabet

    elseif (p(i) == 66)
    p(i) = 81;
    elseif p(i) == 67;
    p(i) = 85;
    elseif p(i) == 68
    p(i) = 89;
    elseif (p(i) == 69) | (p(i) == 89)
    p(i) = 78;
    elseif (p(i) == 70) | (p(i) == 75)
    p(i) = 87
    elseif p(i) == 71
    p(i) = 69;
    elseif (p(i) == 73 ) | (p(i) == 81) | (p(i) == 83)
    p(i) = 72;
    elseif p(i) == 74
    p(i) = 71;
    elseif p(i) == 76
    p(i) = 84;
    elseif p(i) == 77
    p(i) = 68;
    elseif p(i) == 78
    p(i) = 65;
    elseif p(i) == 79
    p(i) = 88;
    elseif p(i) == 80
    p(i) = 70;
    elseif p(i) == 84
    p(i) = 77;
    elseif p(i) == 85
    p(i) = 66;
    elseif p(i) == 86
    p(i) = 89;
    elseif p(i) == 87
    p(i) = 80;
    elseif p(i) == 88
    p(i) = 76;
    elseif p(i) == 90
    p(i) = 73;
    else
    p(i) = 32;
    end
    end
    disp(['The enciphired message is: ',num2str(p)]);

    Is there a way of making this program any shorter? ( Maybe vectorising). The program ciphers as follows: (ABCDEFGHIJKLMNOPQRSTUVWXYZ ----> SQUYNWEZHGWTDAXFHRHMBZPLNI).

    Thank you for your help guys.
     
  2. jcsd
  3. Oct 13, 2007 #2

    CRGreathouse

    User Avatar
    Science Advisor
    Homework Helper

    Yes, just make an array with the destination values SQUY...LNI and look at the appropriate element in that list. Something like dest(p(i) - 65), hwere dest(0) = 'S', dest(1) = 'Q', etc.
     
  4. Oct 13, 2007 #3
    You are missing characters in your mapping. Sort this second string (SQUYNWEZHGWTDAXFHRHMBZPLNI) to see a few problems:

    AB DEFG HHH I LM NN PQRSTU X WW Y ZZ

    EDIT: Well, maybe this is intentional. Code like this:

    elseif (p(i) == 73 ) | (p(i) == 81) | (p(i) == 83)
    p(i) = 72;

    ...will map three different characters to the same one: H. It makes complete decyphering impossible, but you may have some reason...
     
    Last edited: Oct 13, 2007
  5. Oct 13, 2007 #4
    The code has to work with any radomly generated alphabets & deciphering should also be possible. So far, it is indeed impossible for me to decipher the messages.
     
  6. Oct 13, 2007 #5
    I also note some comments in your code that say "Find all ASCII codes which are less than 88 and not spaces. Replace each letter with the letter 3 places along in the alphabet." This means mapping ABC...W to DEF...Z but you are implementing an entirely different mapping.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Please help with my ciphering program.
Loading...