Opacity is important in investigating secrecy, privacy, and other properties in general systems that can be modeled as discrete event systems. To ensure opacity, a controller may be used to control information released to the public. For transparency and other reasons, it is often desired that the information released to the public be maximum, as long as opacity is not violated. In this paper, we investigate how to release the maximum information while ensuring opacity. We find a necessary and sufficient condition for an information release policy to ensure opacity. We also develop methods and algorithms to design a controller that releases maximum information. We consider both strong opacity and weak opacity. We apply the results to the dining cryptographers problem.