3

次のように、特定の文字リストから可能なすべての文字の組み合わせを出力するコードがあります。

def charList():
    charSet = string.ascii_letters + string.digits
    for wordchars in product(charSet, repeat=8):
        print(''.join(wordchars))

ここで、出力文字列を DES ハッシュに変換し、その出力をユーザー入力と比較して、一致するものがあるかどうかを確認する必要があります。

色々と調べているのですが、あまり進展がありません。ここにいる誰かが助けてくれるかどうか疑問に思っていますか?

4

3 に答える 3

2

文字列をハッシュしたい (そして暗号化しない) 場合は、組み込みのhashlibモジュールを使用できます。

>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'

編集:コメントで述べたように、hashlib.sha256()今日はどちらがはるかに安全かを優先してください。

于 2012-11-14T17:53:15.317 に答える
1

http://docs.python.org/2/library/crypt.html

プラットフォーム:Unix

このモジュールは、変更されたDESアルゴリズムに基づく一方向ハッシュ関数であるcrypt(3)ルーチンへのインターフェイスを実装します。詳細については、Unixのマニュアルページを参照してください。考えられる用途には、Pythonスクリプトがユーザーから入力されたパスワードを受け入れることを許可したり、辞書を使用してUnixパスワードを解読しようとしたりすることが含まれます。

このモジュールの動作は、実行中のシステムでのcrypt(3)ルーチンの実際の実装に依存することに注意してください。したがって、現在の実装で利用可能な拡張機能は、このモジュールでも利用できます。

crypt.crypt(word、salt)

単語は通常、プロンプトまたはグラフィカルインターフェイスで入力されたユーザーのパスワードになります。saltは通常、ランダムな2文字の文字列であり、4096の方法のいずれかでDESアルゴリズムを混乱させるために使用されます。ソルトの文字は、セット[./a-zA-Z0-9]に含まれている必要があります。ハッシュされたパスワードを文字列として返します。文字列は、ソルトと同じアルファベットの文字で構成されます(最初の2文字はソルト自体を表します)。

いくつかのcrypt(3)拡張機能では、ソルトのサイズが異なるさまざまな値が許可されるため、パスワードをチェックするときは、完全に暗号化されたパスワードをソルトとして使用することをお勧めします。

典型的な使用法を示す簡単な例:

import crypt, getpass, pwd 
def login():
        username = raw_input('Python login:')
        cryptedpasswd = pwd.getpwnam(username)[1]
        if cryptedpasswd:
            if cryptedpasswd == 'x' or cryptedpasswd == '*':
                raise NotImplementedError(
                    "Sorry, currently no support for shadow passwords")
            cleartext = getpass.getpass()
            return crypt.crypt(cleartext, cryptedpasswd) == cryptedpasswd
        else:
            return 1
于 2012-11-14T17:49:00.737 に答える
1

DES と Python をすばやく検索すると、次のライブラリが表示されました。

于 2012-11-14T17:44:55.837 に答える