哈希算法(Hashing Algorithm
)是一种将任意长度的输入数据转换为固定长度的输出数据(哈希值或散列值)的算法。
哈希算法广泛应用于计算机科学和信息安全领域,用于数据完整性验证、密码存储、数字签名、数据结构等多个方面。
以下是一些常见的哈希算法:
MD5
(Message Digest 5
):MD5
是一种广泛使用的哈希算法,生成128
位(16
字节)的哈希值。然而,由于其容易受到碰撞攻击的影响,不再建议用于安全敏感的应用。SHA-1
(Secure Hash Algorithm 1
):SHA-1
生成160
位(20
字节)的哈希值。与MD5
一样,SHA-1
也已被认为不安全,因为它也容易受到碰撞攻击的威胁。SHA-256
(Secure Hash Algorithm 256位
):SHA-256
是SHA-2
家族中的一员,生成256
位(32
字节)的哈希值。它目前被广泛使用,提供了较高的安全性。SHA-3
(Secure Hash Algorithm 3
):SHA-3
是新一代的哈希算法,提供了与SHA-2
不同的设计,也具备较高的安全性。它有多个变体,如SHA3-256
、SHA3-512
等。RIPEMD
(RACE Integrity Primitives Evaluation Message Digest
):RIPEMD
家族包括RIPEMD-160
、RIPEMD-256
等变体,用于生成不同长度的哈希值。RIPEMD-160
曾经用于比特币地址生成。bcrypt
:bcrypt
是一种基于Blowfish
加密算法的哈希算法,通常用于密码存储。它具有自适应性,可以通过增加计算成本来提高安全性。scrypt
:scrypt
是一种哈希函数,专门设计用于抵抗硬件攻击。它通常用于密码学安全领域,特别是密码存储。Whirlpool
:Whirlpool
是一种新兴的哈希算法,生成512
位的哈希值。它在一些安全领域中被使用,但没有像SHA-2
那样广泛流行。Blake2
:Blake2
是一种高性能哈希函数,用于替代MD5
和SHA-2
等不安全的哈希算法。它在许多应用中广受欢迎,包括密码管理和加密货币。
而在 crypto-js
中支持的哈希算法有以下几种:
2-1.MD5
MD5
全称是Message Digest 5
,即信息摘要算法,是一种广泛使用的哈希函数。
它能够生成 128
位(16
字节)固定长度的哈希值。
它已被用于各种安全应用程序,并且通常用于检查文件的完整性。
const MD5 = require('crypto-js/md5')
const text = 'Hello World'
// {
// words: [ -1324708431, 1692431681, 95922587, -416399387 ],
// sigBytes: 16
// }
console.log(MD5(text))
// b10a8db164e0754105b7a99be72e3fe5
console.log(MD5(text).toString())
2-2.SHA-1
SHA-1
全称是 Secure Hash Algorithm 1
,即 安全哈希算法v1版本
。
它能够生成 160
位(20
字节)固定长度的哈希值。
它与 MD5
在安全方面,同样存在碰撞攻击的风险,因此在业务开发中,推荐使用更高版本的 SHA
。
const SHA1 = require('crypto-js/sha1')
const text = 'Hello World'
// {
// words: [ 172840360, -679942910, 799764505, 2009454656, -1144748336 ],
// sigBytes: 20
// }
console.log(SHA1(text))
// 0a4d55a8d778e5022fab701977c5d840bbc486d0
console.log(SHA1(text).toString())
2-3.SHA-2
SHA-2
全称是 Secure Hash Algorithm 2
,它是 SHA
算法的 v2
版本。
相比 v1
,它更加安全。
该版本中,大致存在 4
个变体,但它们之间的区别只是计算结果的字段长度不同。譬如:
SHA-224
SHA-256
SHA-384
SHA-512
const SHA224 = require('crypto-js/sha224')
const text = 'Hello World'
// {
// words: [
// -997650513,
// -38793123,
// -1726331362,
// 1720592230,
// -2059396350,
// -357437629,
// 1920553031,
// 1985917493
// ],
// sigBytes: 28
// }
console.log(SHA224(text))
// c4890faffdb0105d991a461e668e276685401b02eab1ef4372795047
console.log(SHA224(text).toString())
const SHA256 = require('crypto-js/sha256')
const text = 'Hello World'
// {
// words: [
// -1517181228,
// 200548416,
// 1241585459,
// -810045040,
// -701733441,
// 198026027,
// 1471313881,
// -1382083474
// ],
// sigBytes: 32
// }
console.log(SHA256(text))
// a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
console.log(SHA256(text).toString())
2-4.SHA-3
SHA-3
,顾名思义是 Secure Hash Algorithm 3
,它是 SHA
算法的 v3
版本。
相比 SHA-2
,它采用了更新的加密算法和逻辑。但在安全性方面,SHA-2
和 SHA-3
都是值得信任的。
crypto-js
的 SHA-3
也存在于 SHA-2
相同的 4
个变体,但与 SHA2
的使用方式不同:
const SHA3 = require('crypto-js/sha3')
const text = 'Hello World'
// cdb63525237c078fe2292b7a81e5eb1b6a9758a837372b0d974863b3
console.log(SHA3(text, { outputLength: 224 }).toString())
// 592fa743889fc7f92ac2a37bb1f5ba1daf2a5c84741ca0e0061d243a2e6707ba
console.log(SHA3(text, { outputLength: 256 }).toString())
// fd7eefc50b9b462c5b3b18a79a97785a0e61513cc8c0fcbcf4c15f2c97f5414183aa97a3de68cd8db96adb9aaa0f0b0a
console.log(SHA3(text, { outputLength: 384 }).toString())
// 3c52dbaa2d9902c35bcf80169c17e5ab4edfb28b78be5b2257697db95ee58f336c426db12a9c19a1bb61a89b7e534fca88555eebe811b01ed828c0d5a4687b3e
console.log(SHA3(text, { outputLength: 512 }).toString())
2-5.RIPEMD160
RIPEMD
全称是 RACE Integrity Primitives Evaluation Message Digest
。即RACE完整性基元评估消息摘要
RIPEMD
家族包括 RIPEMD-160
、RIPEMD-256
等变体,用于生成不同长度的哈希值。
crypto-js
中只提供了 RIPEMD160
算法:
const RIPEMD160 = require('crypto-js/ripemd160')
const text = 'Hello World'
// a830d7beb04eb7549ce990fb7dc962e499a27230
console.log(RIPEMD160(text).toString())
TIP
RIPEMD-160
在许多密码学和加密应用中使用,特别是在数字签名和加密货币领域。譬如比特币。
它的输出长度相对较短,适合于创建短哈希值,但在一定程度上也提供了足够的安全性。