https://gaviki.com/blog/encrypt-and-decrypt-problem-statement/