You can use a **signature** function for this. Here's how:

 1. Post a signature to a blockchain. Nobody knows who signed this signature or what the data contains.
 2. Whenever you want to `decrypt` this signature, provide the address that signed it, as well as the data it contains. As long as the address you signed it with is new (i.e. randomly-generated), the data remains hidden until this time.
 3. Do the validation of the signature on-chain so your smart contracts can respond to a correctly decrypted (i.e. proven signature) value. 


Because Web3 is constantly changing, look into the Open-Zeppelin SignatureBouncer.sol contracts,
    as well as their tests in Web3 for working Solidity/Javascript code. There are about 10,000 bad signature signing examples on Google because of the changes to Web3 and solidity.