4

WindowsでPythonを介してLDAP互換パスワード(md5cryptを推奨)を作成する方法を知っていますか

私はLinuxでこのようなものを書いていましたが、cryptモジュールはWindowsには存在しません

char_set = string.ascii_uppercase + string.digits
salt = ''.join(random.sample(char_set,8))
salt = '$1$' + salt + '$'
pwd = "{CRYPT}" + crypt.crypt(str(old_password),salt)
4

4 に答える 4

4

Passlib Python ライブラリには、すべての crypt(3) アルゴリズムのクロスプラットフォーム実装が含まれています。特に、ldap_md5_cryptが含まれています。これは、まさにあなたが望むもののように聞こえます。使用方法は次のとおりです (このコードは Windows または Linux で動作します)。

from passlib.hash import ldap_md5_crypt

#note salt generation is automatically handled
hash = ldap_md5_crypt.encrypt("password")

#hash will be similar to '{CRYPT}$1$wa6OLvW3$uzcIj2Puf3GcFDf2KztQN0'

#to verify a password...
valid = ldap_md5_crypt.verify("password", hash)

MD5-Crypt は広くサポートされていますが (Linux、すべての BSD、内部的には openssl で)、利用可能な最も強力なハッシュではないことに注意してください。Linux crypt() と互換性のある最強のハッシュが必要な場合は、おそらく SHA512-Crypt が最適です。可変ラウンドが追加され、MD5-Crypt に内部的にいくつかの改善が加えられました。

于 2011-04-07T00:50:35.167 に答える
3

ここからhttp://www.openldap.org/faq/data/cache/347.html

SHA ハッシュを生成するためのバリアントの 1 つは次のとおりです。

import sha 
from base64 import b64encode 

ctx = sha.new("your_password") 
hash = "{SHA}" + b64encode(ctx.digest())
print(hash)

このコードは Python 用です。

# python my_sha.py
{SHA}Vk40DNSEN9Lf6HbuFUzJncTQ0Tc=

私 (そして私だけでなく)は、MD5 を使用することをお勧めしません

PS。リンクに従って、いくつかの Windows バリアントを試すことができます。

于 2015-03-04T11:16:41.497 に答える
1

Unix モジュールの純粋な Python 実装であるfcryptを使用することをお勧めしますcrypt。より少し遅いですcryptが、同じ機能を持っています。

于 2010-11-01T16:09:49.283 に答える
0

免責事項: 私は暗号化ではなく、Google を知っています。

cryptドキュメントから:

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

をご覧いただけますmd5crypt.py。または、cryptWindowsの場合はGnuWin32の一部です。Unix の man ページの一部を次に示します。Windows インターフェースは似ているはずです。

CRYPT(3) Linux プログラマーズ マニュアル
CRYPT(3)

名前 crypt, crypt_r - パスワードとデータの暗号化

あらすじ

   #define _XOPEN_SOURCE
   #include <unistd.h>

   char *crypt(const char *key, const char *salt);

   char *crypt_r(const char *key, const char *salt,
                 struct crypt_data *data);

-lcrypt でリンクします。

説明

crypt() はパスワード暗号化関数です。これは、(とりわけ) キー検索のハードウェア実装の使用を思いとどまらせることを意図したバリエーションを持つデータ暗号化標準アルゴリズムに基づいています。

key は、ユーザーが入力したパスワードです。

salt は、セット [a–zA–Z0–9./] から選択された 2 文字の文字列です。この文字列は、4096 通りの方法のいずれかでアルゴリズムを混乱させるために使用されます。

キーの最初の 8 文字のそれぞれの下位 7 ビットを取得することにより、56 ビットのキーが取得されます。この 56 ビット キーは、一定の文字列 (通常はすべてゼロで構成される文字列) を繰り返し暗号化するために使用されます。戻り値は、一連の 13 個の印刷可能な ASCII 文字 (最初の 2 文字はソルト自体を表します) である、暗号化されたパスワードを指します。戻り値は、呼び出しごとに内容が上書きされる静的データを指します。

警告: キー スペースは 2**56 の 7.2e16 の可能な値で構成されます。超並列コンピュータを使用すると、この鍵空間の徹底的な検索が可能です。このキー スペースの、一般的に人間がパスワードに使用する部分を検索する、crack(1) などのソフトウェアが利用可能です。したがって、パスワードの選択では、少なくとも一般的な単語や名前を避ける必要があります。選択プロセス中にクラック可能なパスワードをチェックする passwd(1) プログラムの使用が推奨されます。

DES アルゴリズム自体にはいくつかの癖があり、パスワード認証以外では crypt() インターフェースを使用するのは非常に不適切です。暗号化プロジェクトに crypt() インターフェースを使用することを計画している場合は、そうしないでください。暗号化に関する優れた本と、広く利用可能な DES ライブラリの 1 つを入手してください。

于 2010-11-01T16:07:27.013 に答える