可逆暗号をたった1行で書く方法
はじめに
ソフト作ってるとき、「データ丸見えじゃなくてちょっと隠したいなー」ってときはありませんか?
そんなときにおススメな ROT13 っていう方法があります。
ROT13 または ROT-13、rot13 は単換字式暗号(シーザー暗号)の一つである。 アルファベットを一文字毎に13文字後のアルファベットに置き換える。 Aは Nに、 B は O に置き換えられ、以下同様である。
すごい単純な仕組みだけど、これを使えば簡単に可逆暗号することができます。
可逆暗号やってみよう!
さてここからが本題です。
実はPythonには可逆暗号のrot13のencodeとdecodeが用意されています。
# 元の文字列 str = u'xxxxxxxxxxxxxxx' # 暗号化します。 # rot13 でエンコード出来るように base64 エンコードしています。 encrypted = str.encode('utf8').encode('base64_codec').encode('rot_13') >>> print encrypted # これが暗号化された文字列です。 nKEiDTSmnUI0o2gyov5dpN== # 元に戻すときは逆順でデコードします。 decrypted = encrypted.decode('rot_13').decode('base64_codec').decode('utf8') >>> print decrypted (元の文字列)
こんな風に使います。
rot13で変換できる文字がASCII文字に限られているので、一旦base64でエンコードするところがポイントです。
インターネットでデータをやり取りするとき、こうやってちょっと暗号かけてあげると(少し)安心ですね。
おまけ
PHPだと以下みたいに書きます。
function rot13encrypt ($str) { return str_rot13(base64_encode($str)); } function rot13decrypt ($str) { return base64_decode(str_rot13($str)); } $string = '中國是我的家'; $encrypted = rot13encrypt($string); // produces 5Yvg5MlY5cvi5bvE55dR5n62 $decrypted = rot13decrypt($encrypted); // produces 中國是我的家
まとめ
1行で気軽に可逆暗号しましょう!
(復号化した値は私の会社のメールです。気軽にメールしてくださいね)