Python SHA1验证功能

Python SHA1验证功能,python,python-2.7,python-2.x,sha,hashlib,Python,Python 2.7,Python 2.x,Sha,Hashlib,我的教授最近发布了一个供我们使用的示例函数,该函数检查输入,在本例中为“name”,并运行多个测试以返回true或false。然而,他让我们深深地理解了为什么它会这样做。我个人理解实际线路的功能,但我不理解他们为什么这样做,因此如果能向我解释为什么每一条线路都是这样,我将不胜感激。这是如何进行SHA1验证的 import hashlib def enc_check(name): hash = hashlib.sha1() for i in xrange(10):

我的教授最近发布了一个供我们使用的示例函数,该函数检查输入,在本例中为“name”,并运行多个测试以返回true或false。然而,他让我们深深地理解了为什么它会这样做。我个人理解实际线路的功能,但我不理解他们为什么这样做,因此如果能向我解释为什么每一条线路都是这样,我将不胜感激。这是如何进行SHA1验证的

import hashlib

def enc_check(name):
    hash = hashlib.sha1()
    for i in xrange(10):
        hash.update(name[i::10])
        dig = map(ord, hash.digest())
        if sum(dig[::2]) != sum(dig[1::2]) or sum(dig[:len(dig)/2]) != sum(dig[len(dig)/2:]):
            return False
    return True

这个函数没有任何实际意义。如果你理解了每一行,你就不会错过更深层次的含义

基本上,这似乎是一种测试,旨在找到一些特殊值,这些值显示了一组难以实现的属性,特别是如果从索引0开始的输入中提取每十个字符,然后从索引0中提取每十个字符,然后从索引1中提取每十个字符,依此类推,直到你从索引中得到完整的数据,顺序是:0,10。。。10n,1,11,…,10n+1,2,12,…,10n+2,…,9,19,…,10n+9,这10个逐渐增大的字符串中的每一个都将有一个哈希,其中:

  • 偶数字节之和与奇数字节之和相同,且
  • 前半个字节的总和与后半个字节的总和相同

  • 我不知道这两种情况对所有10个哈希值都成立的确切几率,但不可能很高。我想你的教授有一些符合标准的例子,但我不知道他们希望你如何理解这些胡说八道。

    所以我想他正试图向我们展示某种模式,你有什么特别的理由可以考虑吗?或者这只是一个超级具体的例子测试用例?,因为显然我没有遗漏更深层次的含义,我们只需添加构成散列的字符,只要它们满足这两个标准,故事就真的结束了?没有别的了?@zavier:我想不出什么合理的模式。一个加密安全的散列算法应该使每个输出比特依赖于每个输入比特&比特的分布基本上是随机的;虽然使用不完全散列不能完全保留这些保证,但我不知道有什么方法可以避免使用暴力来找到满足这些神秘标准的字符串。SHA-1有,所以粗暴地强迫字符串符合标准可能是可行的,但我不知道你为什么要麻烦。谢谢你的帮助,我真的很感激!,我一定在某个时候误解了他的意思,因为这太具体了,我一定要问,至少现在我知道没有隐藏的意思,而且我实际上有点知识渊博