Any particular reason you haven't? I just skimmed the code, and while 2=>3 string differences might give you some pains since you are doing a lot of works with strings and encryption, you seem to only be using standard packages so this should be an easy port. 2to3 [1] might get you all the way there with no manual changes.
[1] https://docs.python.org/3/library/2to3.html