Here is how I interpret your proposed scheme:
For Alice to commit to a value $M$, she selects a random $r$ and a random $k$. She then computes and publishes the value $C = Encrypt_k( r | M )$
For Alice to reveal the commitment, she publishes the values $k$, $r$ and $M$. Bob verifies that $Encrypt_k( r | M ) = C$
Assuming that $Encrypt$ is a strong encryption function, Bob gets no information (apart from the length, which might not be a big deal) about $M$ from $C$.
However, what Alice could do is select another key $k'$, and compute $Decrypt_{k'}(C) = (r' | M')$. During the reveal phase, Alice might reveal $k'$, $r'$ and $M'$, and Bob will verify that it all checks out.
You may complain that Alice has little control over the contents of $M'$; however, it still remains that Alice committed to one value, and then substituted a different value when she revealed it; that should be impossible.
However, it is likely possible to fix this; for example, by having Alice include $r$ when she commits, and make it long enough that there are unlikely to be two keys where $C$ decrypts to the same $r$ value.
And, you could hide the message length by having Alice always pad $M$ out to the longest possible value.
So, it would appear to work; however it question remains: what advantage would this have over the simple hash-based commitment scheme?