1

私はRainbow Tablesパスワード暗号化の問題を解決しようとしていますが、ここまでしか来ていません。

import sys
import random
import hashlib

def mt_rand (low = 0, high = sys.maxint):
    """Generate a better random value
    """
    return random.randint (low, high)

def substr (s, start, length = None):
    """Returns the portion of string specified by the start and length
    parameters.
    """
    if len(s) >= start:
        return False
    if not length:
        return s[start:]
    elif length > 0:
        return s[start:start + length]
    else:
        return s[start:length]

def unique_salt():
    return substr(hashlib.sha1(mt_rand()),0,22)

password = "12345"
salt = unique_salt()
hash = hashlib.sha1(salt + password).hexdigest()
print(hash)

このエラーが発生しています:

Traceback (most recent call last):
  File "C:/Users/Ajay/PycharmProjects/itertools/test.py", line 27, in <module>
    salt = unique_salt()
  File "C:/Users/Ajay/PycharmProjects/itertools/test.py", line 24, in unique_salt
    return substr(hashlib.sha1(mt_rand()),0,22)
TypeError: must be string or buffer, not int

私は非常に些細なことを見逃していることを知っていますが、どこに行方不明なのかわかりません。助けてください。

4

3 に答える 3

6

hashlib.sha1パラメータとして文字列を受け入れます。

>>> import hashlib
>>> hashlib.sha1('asdf')
<sha1 HASH object @ 0000000002B97DF0>

しかし、int オブジェクトを渡しています。random.randint(名前が示すようにisintオブジェクトの戻り値)

>>> hashlib.sha1(1234)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be string or buffer, not int

os.urandomランダムな文字列を生成するために使用できます:

>>> import os
>>> hashlib.sha1(os.urandom(10)) # `os.urandom(10)` generate 10-bytes random string.
<sha1 HASH object @ 0000000002B97F30>
>>> hashlib.sha1(os.urandom(10)).digest()
'\x0c.y\x08\x13\xf0\x16.\xea\x05\x03\x07{6H\xa0U\xfe\xdfT'
>>> hashlib.sha1(os.urandom(10)).hexdigest()
'6e33d9cfdbd7ffcf062ee502eaa25893f618fcff'
于 2014-01-15T05:35:01.103 に答える
4

Python の組み込み関数を使用typeして、オブジェクトを検査できます。

>>>type(mt_rand())
int
>>>hashlib.sha1(mt_rand())
TypeError: must be string or buffer, not int

これは予想されることです。代わりに、hashlib.sha1 に文字列を渡します。

>>>hashlib.sha1("password")
<sha1 HASH object @ 0x1c89cb0>
于 2014-01-15T05:39:35.050 に答える