在python中,如何在数字对之间设置带破折号的MD5哈希格式?

在python中,如何在数字对之间设置带破折号的MD5哈希格式?,python,asp.net-membership,md5,Python,Asp.net Membership,Md5,在python中,如何在数字对之间设置带破折号的MD5哈希格式 例如,我可以生成如下十六进制字符串: from hashlib import md5 print md5("Testing123!").hexdigest() B8-F5-8C-30-67-91-6B-BF-B5-07-66-AA-8B-DD-D4-2C 这将产生以下输出: b8f58c3067916bbfb50766aa8bddd42c 如何格式化输出,如下所示: from hashlib import md5 print

在python中,如何在数字对之间设置带破折号的MD5哈希格式

例如,我可以生成如下十六进制字符串:

from hashlib import md5
print md5("Testing123!").hexdigest()
B8-F5-8C-30-67-91-6B-BF-B5-07-66-AA-8B-DD-D4-2C
这将产生以下输出:

b8f58c3067916bbfb50766aa8bddd42c
如何格式化输出,如下所示:

from hashlib import md5
print md5("Testing123!").hexdigest()
B8-F5-8C-30-67-91-6B-BF-B5-07-66-AA-8B-DD-D4-2C

注意:这与ASP.NET成员资格提供程序在数据库中存储密码哈希所使用的格式相匹配,因此我可以从Python与之交互。

一个非常有趣的方法是:

>>> x = 'b8f58c3067916bbfb50766aa8bddd42c' # your md5
>>> '-'.join(a + b for a, b in zip(x[0::2], x[1::2])).upper()
'B8-F5-8C-30-67-91-6B-BF-B5-07-66-AA-8B-DD-D4-2C'

一个真正有趣的方法是:

>>> x = 'b8f58c3067916bbfb50766aa8bddd42c' # your md5
>>> '-'.join(a + b for a, b in zip(x[0::2], x[1::2])).upper()
'B8-F5-8C-30-67-91-6B-BF-B5-07-66-AA-8B-DD-D4-2C'
使用答案,你可以做如下事情

hash = md5("Testing123!").hexdigest()
hash = "-".join([hash[i:i+2] for i in range(0,len(hash),2)])
使用答案,你可以做如下事情

hash = md5("Testing123!").hexdigest()
hash = "-".join([hash[i:i+2] for i in range(0,len(hash),2)])
使用:

使用:

这应该起作用:

from hashlib import md5

password = "Testing123!"

def passwordEncoder(password):
    """Return encoded password."""
    return list(md5(password).hexdigest())

def is_even(num):
    """Return whether the number num is even, skip first."""
    if not num == 0:
        return num % 2 == 0

def passwordFormatter(password):
    index = 0
    final_list = []
    while index < len(new_pass):
        letter = new_pass[index]
        if is_even(index):
            final_list.append("-")
        final_list.append(letter.upper())

        index += 1

    return "".join(final_list)

new_pass = passwordEncoder(password)
print passwordFormatter(new_pass)
这应该起作用:

from hashlib import md5

password = "Testing123!"

def passwordEncoder(password):
    """Return encoded password."""
    return list(md5(password).hexdigest())

def is_even(num):
    """Return whether the number num is even, skip first."""
    if not num == 0:
        return num % 2 == 0

def passwordFormatter(password):
    index = 0
    final_list = []
    while index < len(new_pass):
        letter = new_pass[index]
        if is_even(index):
            final_list.append("-")
        final_list.append(letter.upper())

        index += 1

    return "".join(final_list)

new_pass = passwordEncoder(password)
print passwordFormatter(new_pass)

我喜欢这种方法!虽然这本书又好又短,但我觉得很难读。对于我的口味来说,一行中发生的事情太多了。只需使用大写。我喜欢这种方法!虽然这本书又好又短,但我觉得很难读。对我来说,一句话里发生的事情太多了。你之前读过这个问题和其他答案吗?同时回答。这将生成OP请求的正确输出,因此不确定为什么为-1?从上面的回答中可以看出,他们有一个较短的代码段,这很有帮助。python string.py B8-F5-8C-30-67-91-6B-BF-B5-07-66-AA-8B-DD-D4-2C-1因为我认为OP要求你做的事情太多了,正如你在其他答案中看到的那样,同样的结果可以更容易地实现。你之前真的读过问题和其他答案吗?同时回答。这将生成OP请求的正确输出,因此不确定为什么为-1?从上面的回答中可以看出,他们有一个较短的代码段,这很有帮助。python string.py B8-F5-8C-30-67-91-6B-BF-B5-07-66-AA-8B-DD-D4-2C-1因为我认为OP要求你做的太多了,正如你在其他答案中看到的那样,同样的结果可以更容易地实现。。