哈希函数(英语:Hash function)又称散列算法、散列函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。
人话就是不管是什么类型的数据,只要通过这个函数就会变成32个字节长度(256位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 签名的值。 |
SHA256 哈希函数
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的几率很高。
SHA-256(安全哈希算法256位)是一种加密哈希函数,它将数据(例如文档、文件等)接收为输入,并输出一个固定大小(256位)的哈希值。这个哈希值是数据的数字指纹,理论上,不同的数据会产生不同的哈希值。
- SHA-2
- SHA-256 :256 bit,message 长度上限 2^64 - 1 bit
- SHA-384 :384 bit,message 长度上限 2^128 - 1 bit
- SHA-512 :512 bit,message 长度上限 2^128 -1 bi
算法和变体 | 输出散列值长度 (bits) |
中继散列值长度 (bits) |
资料区块长度 (bits) |
最大输入消息长度 (bits) |
循环次数 | 使用到的运算符 | 碰撞攻击 (bits) |
性能示例[3] (MiB/s) |
|
---|---|---|---|---|---|---|---|---|---|
MD5(作为参考) | 128 | 128 (4 × 32) |
512 | 无限[4] | 64 | And, Xor, Rot, Add (mod 232), Or | ≤18 (发现碰撞) |
335 | |
SHA-0 | 160 | 160 (5 × 32) |
512 | 264 − 1 | 80 | And, Xor, Rot, Add (mod 232), Or | <34 (发现碰撞) |
- | |
SHA-1 | 160 | 160 (5 × 32) |
512 | 264 − 1 | 80 | <63[5] (发现碰撞[6]) |
192 | ||
SHA-2 | SHA-224 SHA-256 |
224 256 |
256 (8 × 32) |
512 | 264 − 1 | 64 | And, Xor, Rot, Add (mod 232), Or, Shr | 112 128 |
139 |
SHA-384 SHA-512 SHA-512/224 SHA-512/256 |
384 512 224 256 |
512 (8 × 64) |
1024 | 2128 − 1 | 80 | And, Xor, Rot, Add (mod 264), Or, Shr | 192 256 112 128 |
154 | |
SHA-3 | SHA3-224 SHA3-256 |