哈希函数(英语:Hash function)又称散列算法、散列函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。
人话就是keccak256不管是什么类型的数据,什么长度,只要通过这个函数就会变成32个字节长度(64位16进制)的摘要格式
函数 | 说明 |
ripemd160(bytes memory) returns (bytes20) | 计算输入的RIPEMD-160哈希值 |
keccak256(bytes memory) returns (bytes32) | 计算输入的keccak -256哈希值 |
sha256(bytes memory) returns (bytes32) | 计算输入的SHA-256哈希值 |
ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address) | 利用椭圆曲线签名算法恢复与公钥相关联的地址,出错时返回零。函数参数对应 ECDSA 签名的值。 |
KECCAK-256 哈希函数
SHA-3(第三代安全散列算法,英语:Secure Hash Algorithm 3),之前名为Keccak算法,设计者宣称在 Intel Core 2 的CPU上面,此算法的性能是12.6时钟周期每字节(cycles per byte)SHA-3 在2015年8月5日由 NIST(美国国家标准与技术研究院National Institute of Standards and Technology) 通过 FIPS 202 正式发表,设计者为Guido Bertoni、Joan Daemen、Michaël Peeters 和 Gilles Van Assche 领导的密码学专家团队。
Keccak-256 是一种加密函数,是 Solidity(SHA-3 系列)的一部分。该函数计算输入到固定长度输出的哈希值,从任意数量的输入生成单个 32 字节哈希值。这种加密哈希函数只能在一个方向上使用,并且不能反向使用。
Keccak256 的工作原理
Keccak256 采用了一种独特的结构,称为海绵结构,它由两个阶段组成:吸收阶段和挤压阶段。在吸收阶段,输入的消息被分成多个块,然后通过置换函数进行处理。在这一阶段,输入消息会被 “吸收” 到散列函数的状态中。在挤压阶段,通过反复应用相同的置换函数,从状态中提取输出。这一过程持续进行,直到达到所需的输出长度。
与 SHA-1 和 SHA-2 等传统的 Merkle-Damgård 结构的散列函数相比,Keccak256 的海绵结构具有多种优势。它能更好地抵御某些类型的攻击(比如长度扩展攻击),并且允许输出的长度具有更大的灵活性。
Keccak256 在加密货币中的应用
Keccak256 已成为各种加密货币(尤其是以太坊)不可或缺的组成部分。在加密货币中,Keccak256 具有以下几个关键功能:
-
地址生成: 在以太坊中,用户的钱包地址是通过使用 Keccak256 对其公钥进行散列处理生成的。生成的散列值会被截断,以生成唯一的固定长度地址。此过程确保从钱包地址对公钥或私钥进行逆向工程在计算上是不可行的。
-
智能合约功能: 以太坊的智能合约旨在根据特定条件执行预定义操作。Keccak256 在这些智能合约中用于各种目的,包括验证数字签名、生成随机数和确保数据的完整性。
-
挖矿和共识:Keccak256 被用于以太坊之前的工作量证明(PoW)挖矿算法中,称为 Ethash。矿工们竞相解决一个复杂的数学问题,其中包括使用 Keccak256 对区块头数据和随机数进行散列处理。当矿工找到符合网络难度目标的散列值时,他们就可以提交解决方案,并将新区块添加到区块链中。这一过程可确保以太坊网络的安全,并确保参与节点之间达成共识。
-
区块链安全:Keccak256 等密码散列函数对于维护区块链的安全性和完整性至关重要。区块链中的每个块都包含前一个区块头的哈希值。这就形成了一个相互连接的区块链,使攻击者在不改变所有后续区块内容的情况下改变一个区块的内容在计算上是不可行的。
-
去中心化应用程序 (dApp):Keccak256 用于许多基于以太坊和其他区块链平台构建的去中心化应用程序。这些 dApp 依赖 Keccak256 进行加密操作,例如数据验证、身份验证和各方之间的安全通信。
Keccak-256在线工具
https://emn178.github.io/online-tools/keccak_256.html
https://chaintool.tech/hashTool
remix下使用keccak256函数
更具体可以参考: