LoginSignup
4
3

More than 5 years have passed since last update.

Python3によるシーザー暗号の暗号化、復号の実装

Last updated at Posted at 2018-05-26

###【概要】
タイトル通りシーザー暗号の暗号化、復号をPython3にて実装しました。

###【経緯】
CTFやってみようと思い、CpawCTFの中でシーザー暗号に関する問題があったため実際に実装してから挑戦してみました。
そのためCpawCTFのネタバレを含みますので、ご注意ください。

###【シーザー暗号とは】
Wikipedia - シーザー暗号 より引用

シーザー暗号は単一換字式暗号の一種で、平文の各文字を、辞書順に3文字分シフトして暗号文を作る暗号である。

###【暗号化コード】

# -*- coding: utf-8 -*-

# 暗号化する文字列
encryptionStr = "{abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ}"
# 暗号化から除外する文字列
excludeStr = "{}_"
# 暗号化した文字列の結果を格納
result = ""
# アルファベットをずらす数
SHIFT_COUNT = 3

for c in encryptionStr :
    # 除外する文字列ならば変換せず、そのままにする
    if excludeStr.find(c) != -1 :
        result = result + c
        continue
    
    # 暗号化する処理
    if ord('a') <= ord(c) <= ord('z') :
        result = result + chr(abs(((ord(c) + SHIFT_COUNT - ord('a')) % 26)) + ord('a'))
    else :
        result = result + chr(abs(((ord(c) + SHIFT_COUNT - ord('A')) % 26)) + ord('A'))

print (result)

######実行結果
{defghijklmnopqrstuvwxyzabc_DEFGHIJKLMNOPQRSTUVWXYZABC}

###【復号コード】

# -*- coding: utf-8 -*-

# 復号する文字列
encryptionStr = "{abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ}"
# 復号から除外する文字列
excludeStr = "{}_"
# 復号した文字列の結果を格納
result = ""
# アルファベットをずらす数
SHIFT_COUNT = 3

for c in encryptionStr :
    # 除外する文字列ならば変換せず、そのままにする
    if excludeStr.find(c) != -1 :
        result = result + c
        continue
    
    # 復号する処理
    if ord('a') <= ord(c) <= ord('z') :
        result = result + chr(abs(((ord(c) - SHIFT_COUNT - ord('a')) % 26)) + ord('a'))
    else :
        result = result + chr(abs(((ord(c) - SHIFT_COUNT - ord('A')) % 26)) + ord('A'))

print (result)

######実行結果
{xyzabcdefghijklmnopqrstuvw_XYZABCDEFGHIJKLMNOPQRSTUVW}

4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3