LoginSignup
0
0

More than 3 years have passed since last update.

【Python学習中】 4桁のパスコードを総当たりするのに、何秒かかるのか randint/for/time/

Posted at

やりたいこと
手元のiPhoneをみていたら、4桁のパスコードロックはどのくらいで破られるのかが気になりました。
さっと計算すると、「0000」から「9999」まで、10の4乗で10000通りの組み合わせがあるはず。
これをPythonをつかって総当たりしていくと、一体何秒でパスコードを見破れるのかを測ってみました。

「8400rpm。420馬力
あなたがこの文章を読み終える時間で
時速100kmまで加速する。」
10年前くらいの自動車雑誌に掲載されていた、BMW M3クーペの宣伝文句です。

果たしてそれよりも早いのか、遅いのか。
BMW M3クーペと勝負!

背景
・Python初習者です。
・基本的なことは学んだが、どう応用して良いかわからず、仕事で使うわけでもなく、モチベーション低下気味です。

考え方
・4桁のPINコードは、銀行の暗証番号やスマホのロック画面でよく使われる0から9の数字を4桁に組み合わせて使うものを想定。
・PINコードはわからない前提で、ランダム関数を使ってランダムに生成。
・「0000」から「9999」まで総当たりで試していき、マッチした場合に「iPhone unlocked」というメッセージを表示することにする。

コード

pin_code_breaker.py
from random import randint
import time

pin_n = randint(0, 9999)

def iphone_unlock(pin_n):
    for i in range(0, 9999):
        print(format(i, '04'))
        if i == pin_n:
            print(f"PIN is {pin_n}, iPhone unlocked.")
            break
    else:
        print('Process finished.')


start = time.time()
iphone_unlock(pin_n)
elapsed_time = time.time() - start
print(f"elapsed time: {elapsed_time}")

考察
・0000から総当たりでマッチングを試していくので、生成されたPINコードが若い(0000に近い)ほど処理時間は短く、大きいほど(9999に近い)処理時間が長くなる。
・しかし、長くても3秒以内には処理が終わる。
・4桁のパスワードそのものは無防備であることがわかった。

0
0
1

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
0
0