Le problème semble être avec un bug dans les cryptojs qui fait que la bibliothèque ne fonctionne pas si la chaîne d'entrée contient de nouvelles lignes. Encodant le fichier comme ceci:
openssl enc -aes-256-cbc -in pup.jpg -pass pass:"password" | base64 | tr -d '\n' > pup.enc
résout le problème. Le problème veut avec le javascript, mais avec le codage. Eh bien, et avec JavaScript, car il y a un bug dans les cryptojs: https://code.google.com/p/crypto-js/issues/detail?id=38