pythonでn文字ずつ取り出す

python

まず例として、 abcdefghijkl の12文字を3文字ずつ取り出す、すなわち3文字ずつ区切って表示する方法をpythonコードと共に解説する。

3文字ずつ取り出すpythonコード

>>> s = 'abcdefghijkl'
>>> i = 0
>>> j = 3
>>> for _ in range(len(s) // 3):
...   print(s[i:j])
...   i += 3
...   j += 3
... 
abc
def
ghi
jkl

(最後のaからlの部分は3文字ずつ出力されたもの。フォントの配色が分かりづらい)

jの初期値、rangeの中の割る数、ijのインクリメントに現れる”3”という数字は、”3”文字ずつ区切るという理由から来ている。

※例外処理等が一切無いのでそこは適宜書き加えて。

 

32文字ずつ区切って表示する

『詳解セキュコン』の16章。

16.5の「ECBモードに対する攻撃」で暗号文と平文の対応を調べるときに、その出力を32文字ずつ区切って考える場面がある。

 

暗号文を32文字ずつ区切るためのpythonスクリプトを以下に示す。

'''
標準入力された文字列について、先頭から32文字ずつ区切って表示する。
'''
s = input('enter your strings> \n')
def main():
    i, j = 0, 32
    for _ in range(len(s) // 32):
        print(s[i:j])
        i += 32
        j += 32

if __name__ == '__main__':
    main()

このファイルをeach.pyという名前で保存したと仮定して以下のように使用する。

 

まず本書(p.278)に従ってecb_service.pyを実行して暗号文を得る:

$ python3 ecb_service.py
username> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
27fba2e9f5236c0fd21beac1e80cf5f23bfd04cc0d7ed55358e2cbe19de213833bfd04cc0d7ed55358e2cbe19de21383558a980bd73b36d0dda5ec6a496cff097ecb8c8420359d54f0d7699a1cfa4f8d

そして上で作成したeach.pyスクリプトを実行し、得られた暗号文を標準入力として渡す:

$ python3 each.py
enter your strings>
27fba2e9f5236c0fd21beac1e80cf5f23bfd04cc0d7ed55358e2cbe19de213833bfd04cc0d7ed55358e2cbe19de21383558a980bd73b36d0dda5ec6a496cff097ecb8c8420359d54f0d7699a1cfa4f8d
27fba2e9f5236c0fd21beac1e80cf5f2
3bfd04cc0d7ed55358e2cbe19de21383
3bfd04cc0d7ed55358e2cbe19de21383
558a980bd73b36d0dda5ec6a496cff09
7ecb8c8420359d54f0d7699a1cfa4f8d

こうして32文字ずつ区切って表示することができた。

(同じ文字列”3bfd04cc0d7ed55358e2cbe19de21383”が現れていることも確認できる。)

 

やったぁ!!

タイトルとURLをコピーしました