したがって、これは奇妙なものかもしれません:
hashlib.md5((hashlib.md5(salt).hexdigest())+(hashlib.md5(plaintext).hexdigest())).hexdigest()
これがMyBBのハッシュアルゴリズムです。私のPythonプログラムでは、これは簡単に実装できます。ただし、ハッシュアルゴリズムが不明で、ユーザーがハッシュアルゴリズムを入力する必要がある場合、それを実装する方法がわかりません。
つまり、基本的には、ユーザーが入力したアルゴリズムで何かをハッシュしたいと思います。彼らのアルゴリズムが次の場合:
md5(salt + md5(password))
私はやってみたいです:
hashlib.md5(salt + hashlib.md5(password).hexdigest()).hexdigest()
助けて?
ああ、使用するモジュールはすべてネイティブである必要があります。Python2に事前に含まれています。
次に、Jinja2をパーサーとして使用できます。
import hashlib
from jinja2.sandbox import SandboxedEnvironment
def md5(s):
return hashlib.md5(s).hexdigest()
# Sandbox because the source is likely to be untrusted
env = SandboxedEnvironment()
# Parsing any formula, wrapped in {{ ... }}
template = env.from_string('{{md5(salt + md5(password))}}')
# Running it:
hash_ = template.render(md5=md5, salt='3Fd0@5l4x', password='secret')
# hash_ == u'10aaeb818dd269d75bf460469c6b90ab'
@nathancahillが正しく示唆しているように、これをさらに改善して、より多くのアルゴリズムを含めることができます。
import functools
def hexify(algorithm):
func = getattr(hashlib, algorithm)
@functools.wraps(func)
def hex_func(s):
return func(s).hexdigest()
return hex_func
algorithms = dict((name, hexify(name)) for name in hashlib.algorithms)
template.render(salt='3Fd0@5l4x', password='secret', **algorithms)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加