Skip to content

哈希算法(Hashing Algorithm)是一种将任意长度的输入数据转换为固定长度的输出数据(哈希值或散列值)的算法

哈希算法广泛应用于计算机科学和信息安全领域,用于数据完整性验证、密码存储、数字签名、数据结构等多个方面。

以下是一些常见的哈希算法:

  1. MD5Message Digest 5):MD5 是一种广泛使用的哈希算法,生成 128 位(16 字节)的哈希值。然而,由于其容易受到碰撞攻击的影响,不再建议用于安全敏感的应用。

  2. SHA-1Secure Hash Algorithm 1):SHA-1 生成 160 位(20 字节)的哈希值。与 MD5 一样,SHA-1 也已被认为不安全,因为它也容易受到碰撞攻击的威胁。

  3. SHA-256Secure Hash Algorithm 256位):SHA-256SHA-2 家族中的一员,生成 256 位(32字节)的哈希值。它目前被广泛使用,提供了较高的安全性

  4. SHA-3Secure Hash Algorithm 3):SHA-3 是新一代的哈希算法,提供了与 SHA-2 不同的设计,也具备较高的安全性。它有多个变体,如SHA3-256SHA3-512 等。

  5. RIPEMDRACE Integrity Primitives Evaluation Message Digest):RIPEMD 家族包括 RIPEMD-160RIPEMD-256等变体,用于生成不同长度的哈希值。RIPEMD-160 曾经用于比特币地址生成。

  6. bcryptbcrypt 是一种基于 Blowfish 加密算法的哈希算法,通常用于密码存储。它具有自适应性,可以通过增加计算成本来提高安全性。

  7. scryptscrypt 是一种哈希函数,专门设计用于抵抗硬件攻击。它通常用于密码学安全领域,特别是密码存储。

  8. WhirlpoolWhirlpool 是一种新兴的哈希算法,生成 512 位的哈希值。它在一些安全领域中被使用,但没有像 SHA-2 那样广泛流行。

  9. Blake2Blake2 是一种高性能哈希函数,用于替代 MD5SHA-2 等不安全的哈希算法。它在许多应用中广受欢迎,包括密码管理和加密货币。

而在 crypto-js 中支持的哈希算法有以下几种:

2-1.MD5

MD5 全称是Message Digest 5,即信息摘要算法,是一种广泛使用的哈希函数。

它能够生成 128 位(16 字节)固定长度的哈希值。

它已被用于各种安全应用程序,并且通常用于检查文件的完整性

js
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

js
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 个变体,但它们之间的区别只是计算结果的字段长度不同。譬如:

  1. SHA-224
  2. SHA-256
  3. SHA-384
  4. SHA-512
js
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())
js
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-2SHA-3 都是值得信任的

crypto-jsSHA-3 也存在于 SHA-2 相同的 4 个变体,但与 SHA2 的使用方式不同:

js
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-160RIPEMD-256等变体,用于生成不同长度的哈希值。

crypto-js 中只提供了 RIPEMD160 算法:

js
const RIPEMD160 = require('crypto-js/ripemd160')

const text = 'Hello World'

// a830d7beb04eb7549ce990fb7dc962e499a27230
console.log(RIPEMD160(text).toString())

TIP

RIPEMD-160 在许多密码学和加密应用中使用,特别是在数字签名和加密货币领域。譬如比特币

它的输出长度相对较短,适合于创建短哈希值,但在一定程度上也提供了足够的安全性。