Python - <strike>304</strike> 295
============


    import random
    r=raw_input
    R=lambda s:range(len(s))
    o=lambda c:ord(c)-65
    j=''.join
    if r()[0]=='D':
     s=r()
     d=r()
     print j(chr((o(s[i])-o(d[i]))%26+65)for i in R(s))
    else:
     s=r()
     d=[random.randint(0,26)for i in R(s)]
     print j(chr((o(s[i])+d[i])%26+65)for i in R(s))
     print j(chr(n+65)for n in d)

I believe that this meets the specs exactly <strike>(Including the `'>'` at the start of the input prompts.)</strike> It does not validate input, so I think that it will just produce garbage output if you give it characters outside of `[A-Z]`. It also only checks the first letter of the input command. Anything starting with `D` will result in a decryption and anything else at all will result in an encryption.