ciphertext

Use the coinc function supplied with the book to compute Friedman' 
      s index of coincidence for several shifts of the ciphertext:

Do[Print[i, " ", coinc[ciphertext, i]], {i, 25}]

Shifts that are a multiple of 8 have higher indices so we guess thatthe key length is 8.   Now look at a slice of the text,  taking every 8  th character:

ct1  =  choose[ciphertext, 8, 1]

Look at the frequencies of this slice .   They should resemble normal English frequencies:

frequency[ct1]

The most common characters by far are d and z;  
    if one of these is e,  
    then the key is z or v .   z is unlikely because if it were the key,  then y would be very common in the plaintext,  
    which is unlikely .   So we guess the first letter of the key is v.

We can also use the dot products of the observed frequencies of the slice with shifts of the frequency vector for normal English:

corr[vigvec[ciphertext, 8, 1]]

Max[%]

The biggest dot product occurs for a shift of 21,  
    which again says the first letter of the key is v.

Define a function to do this automatically:

key[i_]  :=  
      Position[corr[vigvec[ciphertext, 8, i]], 
          Max[corr[vigvec[ciphertext, 8, i]]]] - 1

And use it to find the full key:

Do[Print[key[i]], {i, 8}]

The key is "vigenere" and the plaintext is:

vigenere[ciphertext, -{21, 8, 6, 4, 14, 4, 17, 4}]