Starting from:

$30

Program    #1    Vigenère    Cipher

CIS    3360 – Security    in    Computing

Program    #1    Vigenère    Cipher    (100 points)
In     this     assignment     you'll     write     a     program     that     encrypts     the     alphabetic     letters     in     a     file     using     the
Vigenère    cipher.    Your    program    will    take    two    command    line    parameters    containing    the    names    of    the    
file    storing    the    encryption    key and    the    file    to    be    encrypted.    The    program    must    generate output    to    
the    console    (terminal)    screen    as    specified    below.
Note     that     all     submitted     assignments     will     be     graded     on     the     CECS     Ubuntu     server     named     Eustis.
Submitted     programs     MUST     compile     and     execute     on     Eustis     when     using     a     command     line    
interface    thru    a    secure    shell    connection.
Command    Line    Parameters
1. Your    program must    compile    and    run    from    the    command    line.    
2. Input     the     required     file     names     as     command     line     parameters.     Your     program     may     NOT    
prompt    the    user    to    enter    the    file    names.    The    first    parameter must    be    the    name    of    the    
encryption    key    file,    as    described    below.    The    second    parameter must    be    the    name    of    the    
file    to be    encrypted,    as    also    described    below.     The    sample    run    command    near    the    end    of    
this    document    contains    an    example    of    how    the    parameters    will    be    entered.
3. Your    program    should    open    the two     files,    echo    the    processed    input    to    the    screen,    make    
the     necessary     calculations,     and     then     output the     ciphertext     to     the     console     (terminal)    
screen in    the    format    described    below.
Note:          If     the plaintext file     to     be     encrypted     doesn't     have     the     proper     number (512) of     alphabetic    
characters,    pad    the    last    block    as    necessary    with    the    letter    'X'. Make    sure    that    all    the    input    characters    
are    lower    case    only.
Program    Submission    Instructions:    
• You must submit your source code file
• The source code file must be submitted in Webcourses from the assignment page
• All source code must be in exactly one file of type .c, .cpp, or .java
Encryption    Key    File    Format
The    encryption    key    is    plain    text    that    may    contain    upper    and    lower    case    letters,    numbers,    and    other    
text.    The    input    must    be    stripped    of    all    non-alphabetic    characters. Please    note    that    the    input    text    must    
be    converted    to    contiguous    lower    case    letters    to    simplify    the    encryption    process.
Format    of    the    File    to    be    Encrypted
The    file    to    be    encrypted    can    be    any    valid    text    file    with    no    more    than    512 letters    in    it.    (Thus,    it's    safe    
to    store    all    characters    in    the    file    in    a    character    array    of    size    512,    including    any    padding    characters.)
Please    note    that    the    input    text    file    will    also    generally    have    punctuation,    numbers,    special    characters,    
and    whitespace    in    it,    which should    be    ignored.    You    should    also    ignore    whether    a    letter    is    uppercase    
or    lowercase in    the    input    file. Thus,    you    should    treat    ‘A’    and    ‘a’    the    same    in    your    program. In    order    
to     simply     the     encryption,     all     letters     should     be     converted     to     lower     case     letters. In     the     event     the    
plaintext    input    file    is    less    than    512 characters,    pad    the    input    file    with    a    lowercase    ‘x’    until    the    512    
character    input    buffer    is    full.
Output    Format
The    program    must    output    the    following    to    the    console    (terminal)    screen:
1. Echo    the    unmodified    input    key    file
2. Echo    the    unmodified    input    plaintext    file
3. Ciphertext    output    produced    from    running    the    cipher    against    the    input    plaintext    file.
The     ciphertext and     plaintext output portion should     consist     of     only     lowercase     letters     in     rows     of    
exactly     80     letters     per     row,     except for     the     last     row,     which     may     possibly     have     fewer.     These    
characters    should    correspond    to    the    ciphertext    produced    by encrypting    all    the    letters    in    the    input    
file. Please    note    that    only    the    alphabetic    letters    in    the    input    plaintext    file    will    be    encrypted.    All    other    
characters    should    be    ignored.
What    to    Turn    In    over    WebCourses
You    must    submit    this    assignment    in    Webcourses    as    a    source    file    upload. Note    that    all    grading    will    be    
performed    on    Webcourses submitted    code    that    will    be    run    and    tested    on    Eustis.
Program    Notes    and    Hints
Your     program must     read    in     an    input     plaintext     file     that    may     contain uppercase    letters,    lowercase    
letters     and     non-letter     characters.     Your     program     must     distinguish     between     these    three     groups     so    
that    only    the    letters    get encrypted.    All    non-letter    characters    in    the     file    are    simply    skipped    and    not    
counted    as    part    of     the    plaintext. Please    note     that    although    both    upper    case    and    lower    case    letters    
will     be     encrypted,     your     program     should     convert     an     upper     case    input    letter    to    the     corresponding    
lower    case    letter,    i.e.,    it    should    convert    an    ‘A’    to    an    ‘a’.
One    possible    breakdown    to    solve    this    problem    is    as    follows:
1)    Write    a    section    of code    or    function    that    reads    only    the    upper    and    lower    case    letters    in    the    input    
file    into    an    char    array    of    size    512,    storing    only     the    appropriate    lowercase    letters    in     the    character    
array.
2)     Write     a     section     of     code     or     function     that     takes     as     input     the     array     from     section     1     and     the    
encryption    key    and    produces    an    array    of    ciphertext    storing    only    lowercase    letters.
3)     Write     a     section     of     code     or     function     that     takes     as     input     the     array     storing     the     ciphertext     and    
outputs    it    to    the    screen    in    the    format    specified. Additional    functions    or    code    will    be    needed    to    echo    
the    input    key    and    plaintext    files.
Sample    Key    File1
“I think and think for months and years. Ninety-nine times, the conclusion is false.
The hundredth time I am right.” – Albert Einstein “Imagination is more important than
knowledge. For knowledge is limited, whereas imagination embraces the entire world,
stimulating progress, giving birth to evolution.” – Albert Einstein
Sample    Plaintext    File2
“Fall in love with some activity, and do it! Nobody ever figures out what life is all
about, and it doesn't matter. Explore the world. Nearly everything is really
interesting if you go into it deeply enough. Work as hard and as much as you want to
on the things you like to do the best. Don't think about what you want to be, but what
you want to do. Keep up some kind of a minimum with other things so that society
doesn't stop you from doing anything at all.” - Richard Feynman
Corresponding    Encrypted    Output    File
ntstvxlbyxdqgrxcdqopmpnigbyrdugvbasumqgrzxzrmynyiuchvhbsbzvnwnsldptisbnnqumwwvxa
zxuafkmxlqpwpvvmlmjgkplammrrgrvxzmgpazuzwzqpzcriamxyefdvbctjbuylczxgceehhkttqpva
czlzkyorwhszpatlnsfcqueezfuyefmassampvxdwervqhcxcvemwquiyshvwlvuvobuoosruvnhacoe
shcknneussxfcgoaeblwndiadtbghrmrzzdjaardpfdbiyqieazczabruwglxzflagnwucgjlnkwqvml
ddzwwgawaicbfyikvflamvgmegzobnrbxrepzvuaezqnqytunnqflkfpjlobfjmloqxkqqexkhkltiba
dbclohkltibadbfpifjfqbatebobxpfjxdfkxqflkbjyoxzbpqebbkqfobtloiapqfjrixqfkdmoldob
ppdfsfkdyfoqeqlbslirqflkxiyboqbf
Sample    Run    Command
C or C++ program:
prompt> ./a.out key1.txt plainText1.txt
Java program:
prompt> java vigenere key1.txt plainText1.txt
                                                                                                                                                                                                                                                
1 This    is    k2.txt    in    the    homework    1    ZIP    file.
2 This    is    p2.txt    in    the    homework    1    ZIP    file.
Grading    Rubric
The    total    possible    score    for    this    program    is    100    points.    The    following    point    values    will    be    deducted    
for    the    reasons    stated:
[    -100    points    ]     Your    program    does    not    successfully    compile     from    the    command     line with    one    
of    these    commands:
C    program:                 prompt>             gcc    –o    vigenere vigenere.c
C++    program: prompt> g++    –o    vigenere vigenere.cpp
Java    program: prompt> javac    vigenere.java
Note:        If    you    are    submitting    a    Java    program,    the    class    file    must be    named    “vigenere.java”    and    
the    class    name    must    be    “vigenere”.
[-100    point] The    program    does    not    accept    input    file    names    from    the    command    line.
[    -90    points    ]     Your     program     does     not     run     from     the     command    line    without    error     or     produces     no    
output.
[    -70    points    ]     The    program    compiles,    runs,    and    outputs    the    key    matrix    and    input    file,    but    crashes    
thereafter    or    produces    no    encryption    output.
[    -50    points    ]     The     program     compiles,     runs,     echoes     the     inputs,     and     generates     encryption     output,    
but     the     encryption     output     is     incorrect     (ignoring     case)     and     it     is     not     formatted     correctly     (not     all    
letters    or    not    all    lowercase    or    not    80    characters    per    line).
[    -25    points    ]     The     program     compiles,     runs,     echoes     the     inputs,     generates     encryption     output,     and    
the    encryption    output is    correct    (ignoring    case), but it    is formatted    incorrectly    (not    all    letters    or    not    
all    lowercase    or    not    80    letters    per    line).
[    -25    points    ]     The     program     compiles,     runs,     echoes     the     inputs,     and     generates     encryption     output,    
but     the     encryption     output     is     incorrect     (ignoring     case) although it     is     formatted     correctly     (all    
lowercase    letters,    80    letters    per    line).
[    no    deductions    ]    The    program    compiles,    runs,    echoes    the    inputs,    generates    encryption    output, the    
encryption    output    is    correct    (ignoring    case), and    it    is    formatted    correctly    (all    lowercase    letters,    80    
letters    per    line).
Sample    inputs    &    outputs
There    are    three    commands    and    their    resultant    output    shown    below.    They    are:
• cat    k1.txt
• cat    p1.txt
• ./a.out    k1.txt    p1.txt
These    commands    and    their    output    are    described    below. A    couple    of    things    to    note,    this    is    the    text    output    
from    a    session    on    Eustis and    the    prompt    begins    with    the    login    NID    followed    by    the    terminal    ID    and    the    
current    working    directory.    Each    of    the    cases    below    are    in    the    same    working    directory    hw1 in    the    $HOME    
directory,    indicated    by    the    ~    character.
NID@termID:~/hw1$ cat k1.txt (catalogs the first key file)
bbbbbbbbb
bbbbbbbbb
bbbbbbbbb
bbbbbbbbb
bbbbbbbbb
bbbbbbbbb
bbbbbbbbb
bbbbbbbbb
NID@termID:~/hw1$ cat p1.txt (catalogs the first plaintext file)
"If you find that you're spending almost all your time on theory, start turning
some attention to practical things; it will improve your theories. If you find that
you're spending almost all your time on practice, start turning some attention to
theoretical things; it will improve your practice." - Donald Knuth
NID@termID:~/hw1$ ./a.out k1.txt p1.txt (encrypts the key/plaintext files)
Vigenere Key:
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Plaintext:
ifyoufindthatyourespendingalmostallyourtimeontheorystartturningsomeattentiontopr
acticalthingsitwillimproveyourtheoriesifyoufindthatyourespendingalmostallyourtim
eonpracticestartturningsomeattentiontotheoreticalthingsitwillimproveyourpractice
donaldknuthxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Ciphertext:
jgzpvgjoeuibuzpvsftqfoejohbmnptubmmzpvsujnfpouifpsztubsuuvsojohtpnfbuufoujpoupqs
bdujdbmuijohtjuxjmmjnqspwfzpvsuifpsjftjgzpvgjoeuibuzpvsftqfoejohbmnptubmmzpvsujn
fpoqsbdujdftubsuuvsojohtpnfbuufoujpoupuifpsfujdbmuijohtjuxjmmjnqspwfzpvsqsbdujdf
epobmelovuiyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyNID@termID:~/cis3360/hw1/sum2018$
Each    of    the    four    key    &    plaintext    files    are    included    in    the    ZIP    file    for    this    assignment.    ALSO    note    that    
the    test    file hw1Test.sh runs    all    four    plaintext    and    key    files    thru    your    vigenere code. It    can    be    
invoked    using    the    command    ./hw1Test.sh vigenere.cpp. (The    filename’s    extension    
should    match    the    source    code,    that    is    .c    fo    C,    .cpp    for    C++,    and    .java    for    Java.)

More products