ZKP: Asymmetric encryption with confidential message and known hash
If you wanted to prove a statement like hash(a) = y, I would recommend you to use a generic  zero-knowledge protocols which proves the computation of a boolean circuit using a witness w like presented here and here. The authors first paper even published a reference implementation of SHA256 on github. Even though it's not impossible to additionally prove a statement like z = enc(a), I would recommend you not to do that for several reasons:


The performance will likely be poor due to the expected circuit size and depth.
Considering the adversary model you want to be secure against and the algorithm you choose, it may be still possible to create attacks if you don't pay attention.