I guess some explanation of the code is warranted, if someone doesn't really know how AES and other block ciphers work.
To encrypt something using AES, you need some text to encrypt, a key and a salt (or IV, "initialization vector"; more on this below...).
The key has to be of a supported length for the algorithm. In this case I chose a 256 bits key (32 bytes), but it could also have been 128 bits (16 bytes) or 192 bits (24 bytes). The key HAS to stay secret, it's your password. Ideally it should be randomly generated and securely stored in some manner. Here I just used "00000000000000000000000000000000" for the example.
The salt (or IV) is needed to make sure that if the same data is encrypted twice with the same key, two different cipher texts will be output. In the case of a file, this is also to make sure that the first encrypted block is always different. If you had two different files with the same first 128 bits, and encrypted them with the same salt and key, the first encrypted block would be the same. This is essentially just random data and it does not need to be secret, it just needs to be different each time you encrypt something. In this case I used a GUID as it is by nature unique and random (and incidentally, just the right length; the salt should be the same length as a single block of data, 128 bits). The salt is needed to decrypt the data, but it should not be stored with the key (because it needs to be different for every encryption iteration). Normally you just prepend the encrypted data with the salt when distributing it. This is what I did here, the data is encrypted, the salt is added at the beginning, and the whole thing is Base64 encoded for easy string representation.
To decrypt the data, you just backtrack. Take the Base64 string, convert it to a decoded byte array. The byte array contains the salt in the first 16 bytes (because a GUID is 16 bytes long), and the encrypted cipher text following it. Then you decrypt the cipher text using the secret key and the salt.
The reason you see Rijndael in the code, is because AES is derived from Rijndael, but limited to 128-bits block sizes. I could also have used the AESManaged class, with essentially everything else the same.
Let me know if you have any questions.
PS: Keep in mind the code above is simplified a bit and by no means completely secure. SecureString should be used instead of String for the key and plain text, amongst other things.