一、哈希算法:不是加密的“加密”
在谈论安全时,我们常听到“加密”(Encryption),但哈希(Hashing)是一个截然不同且至关重要的概念。加密是双向的,意味着数据可以被加密,也可以被解密还原。而哈希是单向的,它是一个将任意长度输入(又称预映射, pre-image)通过散列算法变换成固定长度、看似随机的字符串(哈希值)的过程。
这个过程的核心在于“不可逆”。你可以轻松地计算出一部《莎士比亚全集》的哈希值,但几乎不可能从这个哈希值反推出原文。正是这种单向性,奠定了哈希在安全领域的霸主地位。
二、核心特性:一把优秀的哈希尺子
一个可靠的加密哈希函数必须满足以下几个关键特性:
- 确定性:相同的输入永远产生相同的哈希输出。
- 高效性:计算哈希值的过程必须快速,即使对大量数据也是如此。
- 抗碰撞性:极难找到两个不同的输入
x和y,使得H(x) = H(y)。 - 雪崩效应:输入的微小改变(哪怕一个比特位),都会导致输出的哈希值发生巨大且不可预测的变化。
- 单向性:从哈希值反向推算出原始输入在计算上是不可行的。
三、常见的哈希算法与Java实现
Java通过java.security.MessageDigest类提供了简便的哈希计算功能。
1. MD5 (Message-Digest Algorithm 5)
- 输出长度:128位(16字节)

最低0.47元/天 解锁文章
464

被折叠的 条评论
为什么被折叠?



