Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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