パーソナルツール
現在位置: ホーム Addie's Diary Pythonthon

Pythonthon

作者: (A|E)ddie at 2009年03月30日 20時05分 |
Filed under:

ちょっと色々あって、20桁の数字でハッシュ作ったときに、
上何桁あればぶつからないのかを確認したかったので、
久々に日曜プログラムすることに。

いや、月曜なんだけどね。

でPowerShellでやろうとしたんだけど、20桁の数字って
思ってたよりでかくて、扱いきれない。

しょーがないからC#で作って回してみたけど、ぜんぜん終
らない上にメモリをガリガリ喰う。

ちょっと試しに1ハッシュ64バイトとして、20桁の数字全種
類をハッシュ化すると何バイトになるか計算したら。。。

6,400,000,000,000,000,000,000バイト

必要だと判明。こりゃ、メモリどころかファイルにしても無理
だよ。

しょーがないのでメモリ、ファイルを使わずに毎回ハッシュ
を作って計算させることに。そーなるとBignumが使える方
が嬉しいのでPythonで書いてみた。

とりあえず、10分ほどで6桁じゃ足りないことまで判明。
っていうか16の6乗じゃ20桁の数値に届いてないよな!!

ちょっと計算してみたら最低17桁は必要みたい。
計算しなおさせて、寝よっと。

 

以下、ソース

import hashlib
from datetime import datetime
class END(Exception) :
  pass


target = 100000000000000000000

for i in range(17, 65):
  x = 0
  y = 1
  try:
    while x < target:
      while y < target:
        if (x == y):
          raise END
        hx = hashlib.sha256('%020d' % x).hexdigest()
        hy = hashlib.sha256('%020d' % y).hexdigest()
        if (hx[0:i] == hy[0:i]):
          print 'x:%s y:%s is same (%d) time:%s' % (hx, hy, i, datetime.now())
          raise END
        y += 1
      x += 1
  except END:
    pass
  else:
    print 'loop done successfully with %d' % i
    break
ドキュメントアクション
« 2018 年 12月 »
12月
1
2345678
9101112131415
16171819202122
23242526272829
3031