首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模板构造md5散列算法

使用模板构造md5散列算法
EN

Stack Overflow用户
提问于 2015-02-22 19:43:03
回答 1查看 2.2K关注 0票数 4

所以这可能是个奇怪的问题

代码语言:javascript
复制
hashlib.md5((hashlib.md5(salt).hexdigest())+(hashlib.md5(plaintext).hexdigest())).hexdigest()

这是MyBB的哈希算法。在我的python程序中,这很容易实现。但是,当哈希算法不知道,并且用户需要输入一个时,我不知道如何实现它。

基本上,我想用用户输入的算法散列一些东西。如果他们的算法是:

代码语言:javascript
复制
md5(salt + md5(password))

我想做:

代码语言:javascript
复制
hashlib.md5(salt + hashlib.md5(password).hexdigest()).hexdigest()

帮助?

哦,而且使用的任何模块都必须是原生的: Python 2中包含了预包含的模块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-22 20:08:43

您可以使用Jinja2作为解析器,例如:

代码语言:javascript
复制
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正确的建议,您可以进一步改进它,以包括更多的算法:

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28662399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档