Python3実践試験の対策ドリル(非公式)

18章「暗号関連」の対策ポイントと例題

18章「暗号関連」からは本番40問中1問が出ます。ハッシュと乱数の使い分けを問う、出題数の最も少ない章です。

この章の出題数と位置づけ

18章「暗号関連」からは本番40問のうち1問が出題されます。 全体に占める割合は2.5%で、15章中14番目タイの出題数です(同じ1問の章が他に1章あります)。 合格に必要なのは28問正解(12問まで不正解可)なので、 この章の1問をどこまで取りに行くかは、他の章との兼ね合いで決めるのが現実的です。

対策のポイント

この章の例題(3問)

当サイトで実際に出題している問題から3問を、正解と解説つきで掲載します。 すべて自作のオリジナル問題で、実際の試験問題ではありません。

例題1. パスワードリセット用トークンなど、推測されては困る値を生成したい。使うべき標準モジュールはどれか。

解説: secrets は暗号学的に安全な乱数を提供する(token_hex、token_urlsafe など)。random はメルセンヌツイスタによる擬似乱数で予測可能なため、この用途には使ってはいけない。hashlib はハッシュ計算であって乱数生成ではない。uuid は重ならない ID を作るもので、秘密の値のためのものではない。

例題2. 実行結果として正しいものを選べ。

import hashlib
print(hashlib.sha256("abc").hexdigest())

解説: ハッシュ関数はバイト列しか受け付けないので、文字列は "abc".encode() のように符号化してから渡す必要がある。正しく渡した場合、hexdigest() は16進の文字列(sha256 なら64文字)、digest() は bytes を返す。update() で分けて与えても、連結して一度に渡した場合と同じ結果になる。

例題3. secrets.token_hex(16) が返す文字列の長さはどれか。

解説: 引数は生成するバイト数であって、文字数ではない。16進表記では1バイトが2文字になるため32文字になる。同じ16バイトでも token_urlsafe(16) は Base64 系の符号化なのでちょうど22文字と長さが変わる。

この章は当サイトに全8問を収録しています。残りはドリルの「章別に解く」から解けます。

関連する章

出題範囲の一覧に戻る

ドリルを解いてみる(登録不要・無料)