Kevin, thanks for looking into this. Although I couldn't find my initial test code, I suspect I know what my problem was. I was probably using IVs that were not exactly 8 bytes. I was probably thinking that "1" would be extended to 64 bits, but it looks like you have to give all the leading zeroes (i.e., "0000000000000001"). I must not have ever tried an IV that was the right length. It looks like giving an IV of an improper length is the same as just using an empty string for the IV, so that's why it looked like the encrypted data was always the same.
On the php side, it's a little bit of a pain because it expects keys and vectors to be regular strings whereas the Roku uses hex strings. For anyone interested, use pack() in php to transform the hex string you use on the Roku into a key for php. For example:
rokuKey = "7B1CB530521E7554D623E1412A2CF29F"
In php:
$key = pack("H*","7B1CB530521E7554D623E1412A2CF29F");
Do the same thing with your IV.
I haven't sent any significant amount of data, but I was able to encrypt a short string on the Roku and decrypt using the php mcrypt functions.
Thanks again,
-JT
Roku Community Streaming Expert
Help others find this answer and click "Accept as Solution."
If you appreciate my answer, maybe give me a Kudo.
I am not a Roku employee.