Hi Andrew Wang,
I only have a few little nits. In general I'm +1, but I'd like to hear what Yi has to say.
You don't need java.io. since it's imported.
* @param encryptedKeyIv Initialization vector of the encrypted
* key. The IV of the encryption key used to
* encrypt the encrypted key is derived from
* this IV.
In this comment would it be possible to add the word "data" as in "data encryption key" to help clarify the difference between the two keys? I realize you've already got "encrypted" and "encryption", but that's a subtle difference and likely to be lost on an unfamiliar reader.
I don't see a lot of System.out.printlns in unit tests. I suppose it's because it's harder to find the output. Would it be more vogue to use logging?