Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@Nobu12

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

More than 1 year has passed since last update.

【概要】

タイトル通りシーザー暗号の暗号化、復号を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}

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Nobu12
ユニークで奇抜な面白いアイディアのプログラミングをしたい!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?