def sha1(message): """ """ groups = grouped.grouped_pad(message) # 获得消息的二进制分组 #print groups for group in groups: H = ['67452301','efcdab89','98badcfe','10325476','c3d2e1f0'] for i in range(5): H[i] = base.hex_bin(H[i]) #print H[i] words = grouped.expand(group) # 将每组消息扩展为80个字 #print words FIVE = H (A, B, C, D, E) = (FIVE[0], FIVE[1], FIVE[2], FIVE[3], FIVE[4]) #print FIVE for step in range(80): round = step / 20 # 4轮循环 aA = base.circle_left_shift(A, 5) # 左移5位 BCD = base.round_fun(B, C, D, round) #print 'aA = %s, BCD = %s' % (aA, BCD) tmp = base.mod32add(aA, BCD, E, words[step], K[round]) aB = base.circle_left_shift(B, 30) (A, B, C, D, E) = (tmp, A, aB, C, D) FIVE = [A, B, C, D, E] #print 'FIVE:', FIVE print 'step %d :' % step, for i in range(5): haha = base.bin_hex(FIVE[i]) print haha, print for i in range(5): H[i] = base.mod32add(H[i], FIVE[i]) print 'The groups answer:', for h in H: print base.bin_hex(h), print result = [] for i in range(5): result.append(base.bin_hex(H[i])) return ''.join(result)
def expand(group): """将每个512分组再进行分组,并扩展到80个小分组 """ words = [] for i in range(0, 512, 32): words.append(group[i:i+32]) #print words for i in range(16, 80): temp = int(words[i-3],2) ^ int(words[i-8],2) ^ int(words[i-14], 2) ^ int(words[i-16], 2) # 异或 temp = base.dec_bin(temp, 32) # 获得二进制 temp = base.circle_left_shift(temp, 1) # 循环左移一位 words.append(temp) #print len(words) return words
def expand(group): """将每个512分组再进行分组,并扩展到80个小分组 """ words = [] for i in range(0, 512, 32): words.append(group[i:i + 32]) #print words for i in range(16, 80): temp = int(words[i - 3], 2) ^ int(words[i - 8], 2) ^ int( words[i - 14], 2) ^ int(words[i - 16], 2) # 异或 temp = base.dec_bin(temp, 32) # 获得二进制 temp = base.circle_left_shift(temp, 1) # 循环左移一位 words.append(temp) #print len(words) return words