ヴィジュネル暗号
ヴィジュネル暗号の暗号化,復号化のプログラムつくりました.
ヴィジュネル暗号
ヴィジュネル暗号とは、フランスの外交官ブレーズ・ド・ヴィジュネルによる多表式の換字式暗号のことである。多表式の暗号は、単一換字式暗号が安全でなくなってきた15世紀後半から16世紀後半にかけて考え出された暗号で、ヴィジュネル暗号はその中で恐らく最も有名なものである。
wikipedia:ヴィジュネル暗号
いしたーくんのコードを参考に,関数化してまとめたのが以下です.
関数化をすると,なんだかプログラミングしてるって気になります.
# -*- coding: utf-8 -*- # def mkkey(string, key): keya = "" l1 = len(string) l2 = len(key) for i in range(0,int(l1 / l2)): keya += key keya += key[:l1%l2] return keya def encrypt(string, key): result = "" for s, k in zip(string, mkkey(string, key)): n = (ord(k) - 65) + (ord(s) - 65) if n > 25: b = 65 + n - 26 else: b = 65 + n result += chr(b) return result def decrypt(string, key): result = "" for s, k in zip(string, mkkey(string, key)): n = ord(k) - ord(s) if n > 0: b = 91 - n else: b = 65 - n result += chr(b) return result i = 0 string = "JLAPIIJGLAAMTPGLAUMNKRVKJCMGVGOUMLCOIDCPDKUMOWIAI" key = "NEWYEAR" result = decrypt(string, key) print result result = encrypt(result, key) print result # 実行結果 # WHEREISTHECITYTHEWINTEROLYMPICSWILLBEHELDTHISYEAR # JLAPIIJGLAAMTPGLAUMNKRVKJCMGVGOUMLCOIDCPDKUMOWIAI
そして,三項演算子を使って,短く,よみにくくしてみたのが以下!
(参考:Pythonの三項演算子 | 山本隆の開発日誌)
def decrypt(string, key): result = "" for s, k in zip(string, mkkey(string, key)): n = ord(k) - ord(s) result += chr(91 - n if n > 0 else 65 - n) return result
このくらいの式なら三項演算子のほうが読みやすいかなぁと思ったのですが,Javascriptなんかと記述が若干違うので,違和感ありあり.
まともに書いたほうが読みやすそうですね.
はじめに
見返したら今後の自分のためになりそうなブログを書きたい