Python中的漩涡哈希函数
散列函数是一个在使系统安全方面发挥巨大作用的函数,因为它将提供给它的正常数据转换为固定长度的不规则值。我们可以想象它是我们家中的振动器。
当我们将数据放入这个函数时,它会输出一个不规则的值。它输出的不规则值称为“哈希值”。哈希值只是数字,但通常以十六进制编写。计算机将值管理为二进制。哈希值也是一种数据,通常以二进制形式进行管理。
漩涡哈希函数
Whirlpool 是由 Vincent Rijmen 和 Paulo SLM Barreto 创建的加密哈希函数。它于 2000 年首次发布,并于 2001 年和 2003 年进行了修订。它衍生自 square 和 Advanced Encryption Standard。它是一个分组密码散列函数,是在方形分组密码之后设计的。它需要少于 2^256 位长度的输入并将其转换为 512 位哈希。 Whirlpool 的第一个版本称为 Whirlpool-0,在 2001 年第一次修订后更改为 Whirlpool-T。在这个版本中,S-box 发生了变化,并且在硬件中变得更易于使用。 2002 年,在 Whirlpool-0 的扩散矩阵中发现了一个漏洞,通过更改矩阵将其删除,并且名称也从 Whirlpool-T 更改为 Whirlpool。
漩涡中的每个分组密码都是一个 8*8 矩阵。通过使用四个操作,函数的状态不断变化:
Operation Name | Function |
---|---|
Mix Rows(MR) | It is a right multiplication of each row by an 8*8 matrix. |
Substitute Bytes(SB) | It is a simple table lookup and gives nonlinear mapping. |
Add Round Key(AK) | In this the 512 bits of the round key is goes through XOR with 512 bit of current state. |
Shift Columns(SC) | In this except the first column of current state are cyclically downward shifted. |
哈希值使用以下公式计算:
State = MR*AK*SC*SB(State)
使用安装漩涡库
pip install whirlpool
示例 1:
Python3
# Python program to demonstrate
# whirlpool hash function
import whirlpool
string = b"GeeksforGeeks"
h1 = whirlpool.new(string)
hashed_output = h1.hexdigest()
print("The hashed value is")
print(hashed_output)
Python3
# Python program to demonstrate
# whirlpool hash function
import whirlpool
string = b"GeeksforGeeks"
h1 = whirlpool.new(string)
hashed_output = h1.hexdigest()
h1.update(b"Geeks")
hashed_output = h1.hexdigest()
print("The hashed value is")
print(hashed_output)
输出:
The hashed value is
95cb4d2d765eb26a922b3ade5a5837a3bc6b18f9a68cec6392f7bf4284c996dd0dd8775dc77964bb9dd92f204d067d3b2c0f36f968607c88cd378ce094438e5a
示例 2:
Python3
# Python program to demonstrate
# whirlpool hash function
import whirlpool
string = b"GeeksforGeeks"
h1 = whirlpool.new(string)
hashed_output = h1.hexdigest()
h1.update(b"Geeks")
hashed_output = h1.hexdigest()
print("The hashed value is")
print(hashed_output)
输出:
The hashed value is
c3a2aea5a2b487f1a3ee848870dff8ca5af0adcf7eae2a58b40927e87027918c2e9438909c50c2d2bb73f15392c8fde22c94c85a8ef5d8c3b3e86a839909d58b